Android6.Permission 에 대한 주의 사항 요약

3931 단어 Android
Andorid6.다음은 targetSdkVersion 23(=22 이하) 미만에서 0(Marshmallow)에서 추가된 애플리케이션에 대한 라이센스(Runtime Permissions)를 적용할 때 주의사항을 요약한 것이다.

장점


23세의 targetSdkVersion이 23세 이하의 상황에서 대응하지 못하게 하는 장점은 다음과 같다.
· 설치 시 프로그램의 허가가 필요합니다. 모두 허가됩니다.
tagetSdkVersion을 23으로 설정하면 응용 프로그램이 허용하지 않기 때문에 허가 대화상자를 표시하고 사용자의 허가를 받아야 합니다.
· targetSdkVersion을 향상시켜 고장 발생 방지

Permissions 에 대한 고려 사항


targetSdkVersion을 23 이하로 설정하더라도 compuileSdkVersion을 23으로 설정하면 Permission에 필요한 방법을 사용할 수 있다.
단, 아래 열거한 주의점은 다음과 같다.

①Context.checkSelfPermission


각 Permission의 라이센스 여부를 확인하는 방법인 checkSelfPermission(String perission)도 라이센스가 없을 때 진짜로 반환됩니다.

23 미만인 경우 PermissionCheckercheckSelfPermission(Context context, String persion)을 사용하면 적절한 결과를 얻을 수 있습니다.

② onRequestPermissionsResult(..., int[]grantResults)의grantResults는 항상PERMMISSIONGRANNTED 회복


허가가 없을 때 사용자에게 허가 대화상자를 표시하고 '허가' 또는 '허가하지 않음' 의 결과를 선택하는 방법을 받아들이는 방법
23 미만이면 허가 대화상자에서 '허락하지 않음' 을 선택한 경우grantResults도 PERMMISSION을 선택할 수 있습니다GRANNTED로 돌아갑니다.

23 미만의 경우 onRequestPermissions Result(...)내부①의 PermissionCheckercheckSelfPermission(...)를 참고하십시오.
라이센스를 선택한 경우 PermissionCheckercheckSelfPermission(...)진실로 돌아가도록 수정되었습니다.
(targetSdkVersion 23이면 적절한grantResult를 반환합니다.)

③ 라이센스 대화 상자에서 라이센스를 선택하면 응용 프로그램이 다시 시작됩니다.


RequestPermissions(String[]permissions, int requestCode)를 사용하여 라이센스 대화 상자를 표시한 후 라이센스되지 않은 Permission에 대해 [라이센스]를 선택하면 응용 프로그램이 다시 시작됩니다.
라이센스 변경 시 시스템 로그:
I/ActivityManager: Killing *** : Permission related app op changed
적용 -> 응용 프로그램 -> 객체 응용 프로그램의 권한 변경 라이센스 상태를 설정할 때도 마찬가지로 다시 시작합니다.그러나 라이센스 대화 상자에서 라이센스를 변경한 후에만 다시 시작합니다.
targetSdkVersion 23이면 재부팅되지 않습니다.

허가 대화상자를 표시하지 않고 설정된 응용 프로그램의 화면을 보여 허가를 변경하는 방법도 있다.
응용 프로그램의 권한 화면으로 이동할 수 없습니다.
Java

Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:あなたのアプリのパッケージ名"));
startActivity(intent);

④ 허용 대화 상자에서 스토리지 라이센스를 변경한 후 재부팅한 상태에서는 스토리지를 액세스할 수 없습니다.


③ Permission에 대한 스토리지 라이센스 대화 상자를 다시 시작합니다.
PermissionChecker.checkSelfPermission(...)진짜로 돌아가다
실제로 스토리지 라이센스가 필요한 Environmentge tExternal Storage Directory() 등의
File.canWrite()가 휴가를 반환합니다.
또 실제 방문 시 다음과 같은 예외를 토로한다.
W/System.err: java.io.IOException: open failed: EACCES (Permission denied)
W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at java.io.File.createNewFile(File.java:932)
W/System.err: ... 3 more
이 상태에서 멀티태스킹 화면 등을 통해 앱을 다시 시작하면 정상적으로 접근할 수 있다.
또 설정 프로그램에서 허가 상태를 변경한 후 시작하면 이런 현상이 일어나지 않는다.
(targetSdkVersion 23이면 재부팅되지 않으며 허용 대화 상자에서 선택하면 스토리지 디바이스에 정상적으로 액세스할 수 있습니다.

총결산


23 미만이면 일부 제한이 있는 것 같으니 그것에 따라 시행할 필요가 있다.
특히 ④의 경우 재가동 등 대응책을 안내해야 할 수도 있다.

참고 자료

좋은 웹페이지 즐겨찾기