본문 바로가기
programming/android

[Android / 안드로이드] 마시멜로우(6.0) 이상 권한체크

by fluorite94 2018. 9. 3.
반응형

안드로이드 API 22이하 버전에서는 앱이 설치될 때 필요한 권한을 획득해야 했지만, 

 

API 23 부터는 사용자가 앱을 설치될 때가 아니라 앱이 실행되는 중에 필요한 권한을 획득 하여야 합니다. 

 

API 22이하 버전에서 사용자는 앱 권한에 관하여 찝찝하거나 사용하고 싶지 않았을 때엔

 

앱을 사용하지 않는 방법 밖에 없었습니다.

 

하지만 API 23이상 버전에서는 사용자가 원하지 않는 권한은 사용하지 않을 수 있습니다.

만약 권한을 승인했다 하더라도 (설정 -> 앱 -> 해당 앱 선택 -> 권한) 에서 권한을 변경 할 수 있습니다.

 

 

아래의 표는 꼭 Permission을 체크하고 허가를 받아야 하는 Dangerous permissions와 permissions groups입니다.

 

이외의 Permission들은 체크하지 않아도 됩니다.

 

 Permission Group

 Permissions

 CAMERA

 CAMERA

 CALENDAR

 READ_CALENDAR

 WRITE_CALENDAR

 CONTACTS

 READ_CONTACTS

 WRITE_CONTACTS

 GET_ACCOUNTS

 LOCATION

 ACCESS_FINE_LOCATION

 ACCESS_COARSE_LOCATION

 MICROPHONE

 RECORD_AUDIO

 SENSORS

 BODY_SENSORS

 SMS

 SEND_SMS

 RECEIVE_SMS

 READ_SMS

 RECEIVE_WAP_PUSH

 RECEIVE_MMS

 STORAGE

 READ_EXTERNAL_STORAGE

 WRITE_EXTERNAL_STORAGE

 PHONE

 READ_PHONE_STATE

 CALL_PHONE

 READ_CALL_LOG

 WRITE_CALL_LOG

 ADD_VOICEMAIL

 USE_SIP

PROCESS_OUTGOING_CALLS 

 

출처 : https://developer.android.com/guide/topics/security/permissions.html?hl=ko#normal-dangerous

 

권한 체크 및 요청

 

ContextCompat.checkSelfPermission(context, permission)

 

 int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);

 if(permissionCheck== PackageManager.PERMISSION_DENIED){
     //권한 있을 때
}else{
     //권한 없을 때
}

권한 허가 요청

requestPermissions()
// 권한 체크 (권한 없을 경우 -1)
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS)
                   != PackageManager.PERMISSION_GRANTED) {
    //권한 없을 경우
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) {
        // 사용자에게 해당 권한이 필요한 이유에 대해 설명
        // 해당 설명이 끝난뒤 requestPermissions()함수를 호출해 권한허가를 요청
    } else {
        // 최초로 권한을 요청하는 경우 
        ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}
                                                        , MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }
}
else {
    //사용 권한 있을 경우 
}

 

권한 허가 요청 결과

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

반응형


댓글