간편한 Android 6.0 런타임 사용 권한 처리
그런 다음 Activity에서 다음과 같은 새 파일을 시도합니다.
File newFile = new File(Environment.getExternalStorageDirectory() + File.separator + "test.txt");
if (newFile.exists() && newFile.isFile()) {
newFile.delete();
}
try {
newFile.createNewFile();
Toast.makeText(this, " ", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, " ", Toast.LENGTH_SHORT).show();
}
그리고 만약 당신의 핸드폰이 안드로이드 6.0을 기반으로 하고 있다면, 파일을 만들 방법이 전혀 없다는 것을 알게 될 것입니다.Permission denied 오류는 권한 금지라는 의미로 보고됩니다.해결 방법도 간단하다. 두 단계로 나뉜다. 첫 번째 단계는 권한을 부여하는 것이다. 두 번째 단계는 권한을 부여받은 응답의 리셋 인터페이스에서 권한이 성공했는지의 값을 얻는 것이다.승인된 방법은 다음 코드 슬라이스를 참조하십시오.
private void checkStoragePermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// ,
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQ_PERMISSION_STORAGE);
}
}
여기에 검사가 있습니다. 권한을 부여받지 않으면 권한을 부여합니다.승인 응답 콜백의 처리는 다음 코드 슬라이스를 참조하십시오.
if (requestCode == REQ_PERMISSION_STORAGE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, " ", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, " ", Toast.LENGTH_SHORT).show();
}
}
여러분은 Toast에서 프로젝트 수요에 따라 구체적인 프로젝트에 적합한 처리를 할 수 있습니다.위의 전체 코드는 Github 위에 올려져 있으며 관심 있는 분들은 다운로드하여 보실 수 있습니다. 주소:https://github.com/XiaoWenHan/AndroidRunTimePermissionDemo/다음은 유사한 처리를 해야 할 권한 목록을 첨부합니다. 신체 센서 달력 카메라 통신록 지리적 위치 마이크 전화 문자 저장 공간
만약 프로젝트 중의 targetSdk<23이 상술한 처리를 할 필요가 없다면 여러분께 깨우쳐 드리겠습니다.현재 실행 시 권한 수여 처리를 위한 프레임워크가 일부 있으니 관심 있는 분들은 가보세요.아래에는 몇 개가 놓입니다.
PermissionsDispatcher는 마크업 방식을 사용하여 동적 생성 클래스 처리 실행 시 권한을 사용합니다. 현재 플러그인 Fragment는 지원되지 않습니다.
RxPermissions RxJava 기반 런타임 권한 탐지 프레임워크
Grant는 실행 시 권한 처리를 간소화하고 비교적 유연하게 한다
android-RuntimePermissions Google 공식 사례
마지막으로 권한 처리 없이 사용할 수 있는 권한:android.permission.ACCESS_LOCATION_EXTRA_COMMANDS android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_NOTIFICATION_POLICY android.permission.ACCESS_WIFI_STATE android.permission.ACCESS_WIMAX_STATE android.permission.BLUETOOTH android.permission.BLUETOOTH_ADMIN android.permission.BROADCAST_STICKY android.permission.CHANGE_NETWORK_STATE android.permission.CHANGE_WIFI_MULTICAST_STATE android.permission.CHANGE_WIFI_STATE android.permission.CHANGE_WIMAX_STATE android.permission.DISABLE_KEYGUARD android.permission.EXPAND_STATUS_BAR android.permission.FLASHLIGHT android.permission.GET_ACCOUNTS android.permission.GET_PACKAGE_SIZE android.permission.INTERNET android.permission.KILL_BACKGROUND_PROCESSES android.permission.MODIFY_AUDIO_SETTINGS android.permission.NFC android.permission.READ_SYNC_SETTINGS android.permission.READ_SYNC_STATS android.permission.RECEIVE_BOOT_COMPLETED android.permission.REORDER_TASKS android.permission.REQUEST_INSTALL_PACKAGES android.permission.SET_TIME_ZONE android.permission.SET_WALLPAPER android.permission.SET_WALLPAPER_HINTS android.permission.SUBSCRIBED_FEEDS_READ android.permission.TRANSMIT_IR android.permission.USE_FINGERPRINT android.permission.VIBRATE android.permission.WAKE_LOCK android.permission.WRITE_SYNC_SETTINGS com.android.alarm.permission.SET_ALARM com.android.launcher.permission.INSTALL_SHORTCUT com.android.launcher.permission.UNINSTALL_SHORTCUT
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.