프로그래밍/Android

안드로이드 권한

우끼우끼몽키 2017. 2. 24. 02:49

안드로이드 권한 획득 방식

 

마시멜로 - Android 6.0(API 레벨 23) 이전 버전

앱 설치 단계에서 권한을 부여하며, AndroidManifest.xml에 권한을 설정하여 영구적으로 앱의 권한을 획득할 수 있다.

사용자가 앱을 설치한 후에는 앱을 제거하는 것이 권한을 취소할 수 있는 유일한 방법이다.

 

마시멜로 - Android 6.0(API 레벨 23) 이후 버전

AndroidManifest.xml에 권한을 설정하고, 매번 특정 권한이 필요한 기능을 실행하기 전에 반드시 권한 획득 여부를 확인해야 한다. - RunTime Permission

AndroidManifest.xml에 정의한 모든 권한을 RunTime Permission 방식으로 권한을 획득할 필요는 없고, 구글이 정의한 Normal Permission과 Dangerous Permission중 Dangerous Permission에 대해서만 권한을 획득하면 된다.

사용자가 부여한 권한을 언제든지 시스템 설정에서 취소할 수 있다.

 

안드로이드 권한 획득 방법

 

 

AndroidManifest.xml에 <uses-permission> 태그를 사용하여 권한사용을 명시한다.

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   
package="com.android.app.myapp" >
   
<uses-permission android:name="android.permission.RECEIVE_SMS" />
    ...
</manifest>

 

ContextCompat.checkSelfPermission 메서드를 통해 해당 권한이 획득되었는지 확인한다.

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

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);

 

해당권한이 필요한 이유를 설명해야 한다면 shouldShowRequestPermissionRationale 메서드를 사용한다.

  • 앱이 해당 권한에 대해 요청한 이력이 없는 경우(처음인 경우)  False 반환
  • 다시 묻지 않기를 선택하고 거절한 이력이 있는 경우 False 반환
  • 다시 묻지 않기를 선택하지 않고 거절한 이력이 있는 경우 True 반환

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
);

   
}
}

 

앱에 권한이 없는경우 ActivityCompat.requestPermissions 메서드를 통해 권한을 요청할 수 있다.

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
       
ActivityCompat.requestPermissions(thisActivity,
               
new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS
);

}

 

응답을 요청하는 대화상자에 사용자가 응답하면  onRequestPermissionResult 메서드를 호출하여 권한요청의 결과를 받는다.

따라서 메서드를 오버라이딩하여 권한요청 수락 및 거부한 상황에 대한 후속처리를 한다. 수동으로 앱 설정할 수 있는 다이로그를 추가하는 것도 좋다.

@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;
       
}
   
}

}
 

 

'프로그래밍 > Android' 카테고리의 다른 글

안드로이드 생명주기  (0) 2017.04.30
잡지식  (0) 2017.04.29
개발환경 설정  (0) 2017.04.27
Context  (0) 2017.02.21