간편한 Android 6.0 런타임 사용 권한 처리

4242 단어
오늘은 권한이라는 주제에 대해 여러분과 이야기를 나누겠습니다.여러분이 아시다시피 전통적인 의미의 권한은 사용자가 앱을 설치할 때 허가된다.비록 사용 과정에서 일부 제3자 Rom이나 보안 소프트웨어가 다시 권한을 제시하지만 시스템 자체로 보면 통과되었다.Google 6.0 이후 런타임 권한(Runtime Permission)이라는 새로운 권한 메커니즘이 도입되었습니다.이 메커니즘은 외부 저장소를 읽고 쓰기, 프라이버시 데이터에 접근하는 등 민감한 권한을 제한한다.사용자의 데이터 보호에 좋은 보장을 제공하지만 개발자에게 걸림돌도 제공한다.그렇다면 개발자로서 어떻게 해야 하는가?우선 마음을 바로잡는 것이다. 이렇게 하는 것은 확실히 사용자에게 좋은 것이다.그 다음은 바로 공부, 즉 이 문장의 본제이다.Android 스튜디오의 새 프로젝트 마법사에 따라 새 빈 프로젝트를 만든 후, 원래의 방법에 따라 Android manifest에 있습니다.xml은 다음과 같이 권한 설명을 합니다.



그런 다음 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

좋은 웹페이지 즐겨찾기