안드로이드 6.0 (API 23) 이후 Internet, Camera, Read External Storage 등의 기능을 사용하기 위해서는 권한 획득이 필요하다.
AndroidManifest에 아래와 같이 use-permission을 추가하는 것 외에도 사용자에게 권한 요청을 확인할 필요도 있다는 말이다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
만약, 위 예시 중 Camera 기능을 Intent로 호출할 필요가 있을 때,
if (mContext.checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, TAKE_PICTURE);
}
위와 같이 (사용자에게) 권한을 허가 받았는지 체크할 필요가 있다.
그렇지 않으면 당연히 Permission Denied 오류를 뿜는다.
위의 requestPermissions의 결과는 startActivityForResult와 비슷한 방식으로 확인할 수 있다.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == TAKE_PICTURE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
launchCameraService();
} else {
// 권한 획득 실패
}
}
}
onRequestPermissionsResult를 Override하여 requestCode와 grantResults를 확인할 수 있다.
여기서 grantResults는 PackageManager에서 2가지 옵션을 비교하여 처리할 수 있다.
public static final int PERMISSION_DENIED = -1;
public static final int PERMISSION_GRANTED = 0;
'Development > Android' 카테고리의 다른 글
간단하게 갤러리 이미지 가져오기 (0) | 2019.04.07 |
---|---|
간단하게 알림 추가하기 (0) | 2019.04.01 |