안드로이드 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;
}
}
'programming > android' 카테고리의 다른 글
[Android / 안드로이드] Fragment 데이터 전달 (0) | 2018.10.01 |
---|---|
[Android / 안드로이드] EditText 값 변경 이벤트 (0) | 2018.09.30 |
[Android / 안드로이드] Fragment findViewById() 에러 해결법 (0) | 2018.09.15 |
[Android / 안드로이드] aar 라이브러리 추가하기 (0) | 2018.08.29 |
[Android / 안드로이드] Multidex Error (0) | 2018.08.28 |
댓글