개발하는 두더지

[Android] 안드로이드 6.0이상 런타임에 권한 요청 획득 본문

Java,Android

[Android] 안드로이드 6.0이상 런타임에 권한 요청 획득

덜지 2017. 5. 18. 18:18


안드로이드 6.0 ( API 23 ) 부터 사용자는 앱이 설치될 때가 아니라 앱이 실행되는 중에 앱에 권한을 부여합니다.

이 접근방식에서는 사용자가 앱을 설치하거나 업데이트할 때 권한을 부여할 필요가 없으므로 앱 설치 과정이 간소화됩니다.

또한 사용자가 앱의 기능을 더 세부적으로 제어할 수 있습니다.




크게 4가지가 있습니다.


권한 확인

앱에 위험 권한이 필요한 경우, 해당 권한이 요구되는 작업을 실행할 때마다 이 권한의 보유 여부를 확인해야합니다.

ContextCompat.checkSelfPermission() 를 사용합니다.

앱에 권한이 있는 경우  PackageManager.PERMISSION_GRANTED 를 반환하고, 권한이 없는 경우  PERMISSION_DENIED를 반환합니다.


권한 요청

 requestPermissions() 를 사용합니다. 이 메서드는 비동기식으로 작동합니다. 즉각적으로 반환되며, 사용자가 대화상자에 응답한 후에 시스템은 그 결과를 가지고 앱의 콜백 메서드를 호출합니다.


앱에 권한이 필요한 이유 설명

shouldShowRequestPermissionRationale() 를 사용합니다. 이전에 앱이 이 권한을 요청했고 사용자가 요청을 거부한 경우, 이 메서드는 true를 반환합니다. 

과거에 사용자가 권한 요청을 거절하고 권한 요청 시스템 대화상자에서 Don't ask again 옵션을 선택한 경우, 이 메서드는 false를 반환합니다. 



권환 확인, 앱에 권한이 필요한 이유 설명, 권한 요청을 하는 샘플


// Activity에서 동작
if (ContextCompat.checkSelfPermission(thisActivity,
               
Manifest.permission.READ_CONTACTS)
       
!= PackageManager.PERMISSION_GRANTED) {

    // 설명이 필요한가?

   
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
           
Manifest.permission.READ_CONTACTS)) {

       
// 사용자에게 설명을 보여줍니다.
       
// 권한 요청을 다시 시도합니다.

   
} else {
        // 권한요청

        ActivityCompat.requestPermissions(thisActivity,
               
new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS
);

   
}
}


권한 요청 응답 처리

onRequestPermissionsResult() 를 사용합니다. 권한이 부여되었는지 여부를 확인하려면 재정의를 해야합니다.


@Override
public void onRequestPermissionsResult(int requestCode,
       
String permissions[], int[] grantResults) {
   
switch (requestCode) {
       
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
           

           
if (grantResults.length > 0
               
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

               
// 권한 획득 성공

           
} else {

               
// 권한 획득 실패
           
}
           
return;
       
}

   
}
}




권한 체크를 해야하는 목록입니다. 아래의 목록은 권한 획득 창을 띄워서 권한을 받아야합니다.

권한 그룹권한
CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE





Fragment에서 권한 적용 방법입니다.





Comments