투케이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();
            }
        }
    }

반응형
Comments