Notice
Recent Posts
Recent Comments
Link
투케이2K
314. (Android/java) 퍼미션 권한 부여 상태 확인 (true / false) - checkSelfPermission , requestPermissions 본문
Android
314. (Android/java) 퍼미션 권한 부여 상태 확인 (true / false) - checkSelfPermission , requestPermissions
투케이2K 2022. 8. 9. 11:12[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : java
[퍼미션 정의 클래스]
// TODO [전역 변수 : 권한 상태 묻기 배열 선언]
public static final String[] PERMISSION_ARRAY = {
Manifest.permission.READ_PHONE_STATE, // [0] : [폰 상태]
Manifest.permission.BLUETOOTH, // [1] : [블루투스]
Manifest.permission.BLUETOOTH_ADMIN, // [2] : [블루투스]
Manifest.permission.ACCESS_COARSE_LOCATION, // [3] : [위치 권한]
Manifest.permission.ACCESS_FINE_LOCATION, // [4] : [위치 권한]
Manifest.permission.WRITE_EXTERNAL_STORAGE, // [5] : [외부 저장소 쓰기]
Manifest.permission.READ_EXTERNAL_STORAGE, // [6] : [외부 저장소 읽기]
Manifest.permission.CAMERA // [7] : [카메라]
};
// TODO [전역 변수 : 권한 요청 코드]
public static final int PERMISSION_CODE = 999;
// TODO [개별 카메라 권한 활성 상태 체크 실시]
public static boolean cameraPermisseionCheck(Context mContext, int type){
// TODO [type : 1 = 일반 권한 체크 / 2 = 권한 팝업창 호출]
/**
// -----------------------------------------
PERMISSION_ARRAY[0], // [폰 상태]
// -----------------------------------------
PERMISSION_ARRAY[1], // [블루투스]
PERMISSION_ARRAY[2], // [블루투스]
// -----------------------------------------
PERMISSION_ARRAY[3], // [위치 권한]
PERMISSION_ARRAY[4], // [위치 권한]
// -----------------------------------------
PERMISSION_ARRAY[5], // [외부 저장소 쓰기]
PERMISSION_ARRAY[6], // [외부 저장소 읽기]
// -----------------------------------------
PERMISSION_ARRAY[7] // [카메라]
// -----------------------------------------
// */
// [초기 리턴 변수 선언]
boolean resultData = true;
// [로직 처리 수행 실시]
try {
context = mContext;
///*
if (ContextCompat.checkSelfPermission(mContext, PERMISSION_ARRAY[7]) == PackageManager.PERMISSION_GRANTED){
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[C_Permission >> cameraPermisseionCheck() :: 카메라 권한 정상 부여 상태]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [리턴 결과 삽입 실시]
resultData = true;
}
else {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[C_Permission >> cameraPermisseionCheck() :: 카메라 권한 부여 안된 상태]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [리턴 결과 삽입 실시]
resultData = false;
if (type == 2){
// TODO [퍼미션 권한 요청 수행 >> A_Main 클래스 onRequestPermissionsResult 에서 권한 부여 확인]
ActivityCompat.requestPermissions(
(Activity) context,
new String[]{PERMISSION_ARRAY[7]},
C_Permission.PERMISSION_CODE
);
}
}
}
catch (Exception e){
e.printStackTrace();
}
// [결과 리턴 실시]
return resultData;
}
[퍼미션 권한 체크 및 호출 클래스]
// TODO [개별 카메라 권한 부여 체크 실시]
if (C_Permission.cameraPermisseionCheck(A_Main.this, 2) == true){
// [카메라 열기 수행 실시]
}
// TODO [requestPermissions 퍼미션 요청 부분]
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// [SEARCH FAST] : [권한 설명 호출 실시]
/**
* // -----------------------------
* [요약 설명]
* // -----------------------------
* 1. C_Permission 클래스에서 개별 권한 호출한 결과를 받는 부분
* // -----------------------------
* */
if (requestCode == C_Permission.PERMISSION_CODE){
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"[A_Main >> onRequestPermissionsResult() :: 퍼미션 요청 결과 확인 실시]");
Log.i("","\n"+"[PERMISSION :: "+String.valueOf(Arrays.toString(permissions))+"]");
Log.i("","\n"+"[RESULT :: "+String.valueOf(Arrays.toString(grantResults))+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [로직 처리 실시]
try {
/**
// -----------------------------------------
PERMISSION_ARRAY[0], // [폰 상태]
// -----------------------------------------
PERMISSION_ARRAY[1], // [블루투스]
PERMISSION_ARRAY[2], // [블루투스]
// -----------------------------------------
PERMISSION_ARRAY[3], // [위치 권한]
PERMISSION_ARRAY[4], // [위치 권한]
// -----------------------------------------
PERMISSION_ARRAY[5], // [외부 저장소 쓰기]
PERMISSION_ARRAY[6], // [외부 저장소 읽기]
// -----------------------------------------
PERMISSION_ARRAY[7] // [카메라]
// -----------------------------------------
// */
ArrayList permissionArray = new ArrayList(Arrays.asList(permissions));
String permissionNoMessage = "권한 허가를 동의 하지않으셨습니다. [설정] > [권한] 에서 권한을 활성화 해주세요.";
// [거부한 권한 표시 알림 메시지 조합]
if (permissionArray.contains(C_Permission.PERMISSION_ARRAY[7]) == true){
permissionNoMessage = permissionNoMessage + "\n" + "[카메라] 권한 필요";
}
else if (permissionArray.contains(C_Permission.PERMISSION_ARRAY[3])
|| permissionArray.contains(C_Permission.PERMISSION_ARRAY[4])){
permissionNoMessage = permissionNoMessage + "\n" + "[근처 기기] 및 [위치] 권한 필요";
}
else if (permissionArray.contains(C_Permission.PERMISSION_ARRAY[5])
|| permissionArray.contains(C_Permission.PERMISSION_ARRAY[6])){
permissionNoMessage = permissionNoMessage + "\n" + "[파일 및 미디어] 권한 필요";
}
else if (permissionArray.contains(C_Permission.PERMISSION_ARRAY[0])){
permissionNoMessage = permissionNoMessage + "\n" + "[전화] 권한 필요";
}
// [권한이 부여 안된 경우 : -1]
int PERMISSION_NOT_DENIED = PackageManager.PERMISSION_DENIED;
if (Arrays.toString(grantResults).contains(String.valueOf(PERMISSION_NOT_DENIED)) == true){
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"[A_Main >> onRequestPermissionsResult() :: 퍼미션 요청 권한 부여 안된 상태]");
Log.e("//===========//","================================================");
Log.i("---","---");
// [권한 부여 안된 상태 알림 팝업창 표시]
C_Util.showAlert(
A_Main.this,
5, // [애플리케이션 정보 설정 창 이동 실시]
S_FinalData.AL_TITLE, // [알림 타이틀]
permissionNoMessage, // [알림 메시지]
S_FinalData.AL_SET, // [확인 버튼]
S_FinalData.AL_NO, // [취소 버튼]
"" // [노멀 버튼]
);
}
}
catch (Exception e){
e.printStackTrace();
}
}
}
반응형
'Android' 카테고리의 다른 글
Comments