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;
}
}
}
'Android(Java)' 카테고리의 다른 글
[Java] App Link / Deep Link Sceme 데이터 처리 (0) | 2024.06.18 |
---|---|
[Java] SMS 인증번호 자동 등록하기 (1) | 2024.06.13 |
[Java] 갤러리 이미지 추출하기 (0) | 2024.04.15 |
[Java]WebView사용시 target=_blank 사용에 따른 onCreateWindow 호출되는 문제 (0) | 2024.04.12 |
[Java] Log 가독성있게 찍기 (0) | 2024.04.08 |