Android(Java)
[Java] Permission 설정 및 거부시 처리
삽질중
2024. 4. 22. 14:42
ContextCompat.checkSelfPermission
: 해당 권한이 있는지 여부 확인
ActivityCompat.shouldShowRequestPermissionRationale
: 처음 권한 거부한 이력이 있거나 다시보지 않기 설정시 true 리턴됨
[동작설명]
1. 처음 권한 허용 전 호출시 false 리턴됨.
2. 허용안함 클릭후 다시 호출시 true 리턴됨.
3. 허용안함 두번 이상 클릭시 false 리턴됨.
4. 허용 후 수동으로 허용 안함 변경 후 호출시 true 리턴됨.
ActivityCompat.requestPermissions
: 해당 권한 요청 (권한요청 시스템 다이알로그 노출됨)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //>= 23
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// shouldShowRequestPermissionRationale true 일 경우 다이얼 로그로 허용관련 내용 전달 및
// 설정으로 갈수 있게 처리해줌.
if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) getContext(), Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions((Activity) getContext(), new String[]{Manifest.permission.CAMERA}, 0);
return;
} else {
// 다시 보지 않기 또는 처음 거부 했던 이력이 있을 경우
View.OnClickListener confirmListener = new View.OnClickListener() {
public void onClick(View v) {
mCustomDialog.dismiss();
// 앱 권한 설정창으로 이동
Utils.appSettingOpen(getContext());
}
};
View.OnClickListener exitListener = new View.OnClickListener() {
public void onClick(View v) {
mCustomDialog.dismiss();
}
};
mCustomDialog = new CustomDialog(getContext(),
"설정", // 제목
"서류 촬영을 위해 카메라 권한이 필요합니다. 설정에서 허용해 주세요.", // 내용
"나가기",
"설정",
exitListener, // 왼쪽 버튼 이벤트
confirmListener); // 오른쪽 버튼 이벤트
mCustomDialog.show();
return;
}
}
}