안드로이드 6.0 이후부터는 일부 권한의 경우 단순히 AndroidManifest.xml 에 명시하더라도 작동이 되지 않는다.


설치될 때 권한을 부여하는 것이 아니라 실행되는 도중 런타임에 권한을 요청하기 때문이다.


하지만 여전히 AndroidManifest.xml 에 권한을 명시해야 한다.


예제의 경우 주소록 읽기 권한을 요청한다.


권한 요청


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

       
// MY_PERMISSIONS_REQUEST_READ_CONTACTS 의 경우 사용자 정의 값으로
       
// 응답 처리에 필요
}


응답 처리


@Override
public void onRequestPermissionsResult(int requestCode,
       
String permissions[], int[] grantResults) {
   
switch (requestCode) {
       
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
           
// If request is cancelled, the result arrays are empty.
           
if (grantResults.length > 0
               
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

               
// 권한 획득

           
} else {

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

       
// other 'case' lines to check for other
       
// permissions this app might request
   
}
}


별도의 요청이 필요한 권한 목록


CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE


출처 : https://developer.android.com/training/permissions/requesting.html?hl=ko

by JamesY 2017. 12. 21. 14:06