← 글 목록
0%

세 가지 메서드로 끝내는 Android 마시멜로 권한 처리

Android 마시멜로부터 위험 권한은 앱 설치 시점이 아니라 기능을 사용하는 시점에 요청해야 한다. 사용자는 권한이 필요한 맥락을 확인한 뒤 허용 여부를 결정할 수 있다. 런타임 권한 요청에 대응하는 방법을 살펴본다.

권한 처리는 세 가지 핵심 메서드로 구성할 수 있다.


ContextCompat.checkSelfPermission(Context context, String permission)

해당 권한이 허용되었는지 확인한다. 마시멜로 이전 버전을 대상으로 빌드한 앱을 업데이트한 경우에는 기존 권한이 이미 허용되어 있을 수 있다.

Manifest.permission.*에 권한 상수가 정의되어 있으며, 결과는 PERMISSION_GRANTED 또는 PERMISSION_DENIED로 반환된다.


ActivityCompat.shouldShowRequestPermissionRationale(Context context, String permission)

사용자가 이전에 권한 요청을 거부했는지 확인한다. 권한이 필요한 이유를 추가로 안내할지 판단할 때 사용하며, 최초 요청 전에는 false를 반환한다.


ActivityCompat.requestPermissions(Activity activity, String[] permission, int requestCode)

콜백
onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)

권한을 요청하면 시스템 다이얼로그가 표시되고, 결과는 onRequestPermissionsResult() 콜백으로 전달된다.


정리

1) ContextCompat.checkSelfPermission()

  • 해당 권한이 허용되었는지 확인한다.

2) ActivityCompat.shouldShowRequestPermissionRationale()
– 이미 한 번이라도 거부한 경우 권한이 필요한 이유를 상세히 안내한다.
– 다시 묻지 않기를 선택한 사용자를 위해 앱 설정으로 이동하는 액션을 준비한다.

3) ActivityCompat.requestPermissions()
– 권한 요청 콜백 또는 checkSelfPermission()으로 허용 여부를 확인한 뒤 다음 단계를 실행한다.


TIP!

이미 허용된 권한 그룹에 새로운 권한이 추가된 경우에는 requestPermissions()를 호출해도 시스템 UI 없이 결과 콜백이 전달될 수 있다.

사용자가 다시 묻지 않기를 선택하고 거부했다면 권한 다이얼로그를 다시 표시할 수 없다. 이때는 안내 화면에서 ACTION_APPLICATION_DETAILS_SETTINGS 액션으로 앱 정보 페이지를 열어 사용자가 직접 권한을 변경하도록 유도한다.

Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivityForResult(i, REQUEST_CODE_SETTING_ACTIVITY);

권한 안내 가이드는 아래 구글 머티리얼 디자인 사이트를 참조하자.
https://www.google.com/design/spec/patterns/permissions.html#permissions-request-patterns


추가 참고
http://googledevkr.blogspot.kr/2015/09/android60runtimepermission.html
http://developer.android.com/intl/ko/guide/topics/security/permissions.html#normal-dangerous

X 공유