투케이2K

705. (Android/Java) [유틸 파일] getAppPermissionsList - 앱에 부여된 퍼미션 권한 리스트 확인 본문

Android

705. (Android/Java) [유틸 파일] getAppPermissionsList - 앱에 부여된 퍼미션 권한 리스트 확인

투케이2K 2023. 12. 4. 20:33
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

 

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [앱에 부여된 권한 리스트 확인]
    // -----------------------------------------------------------------------------------------
    public static Map<String, List<String>> getAppPermissionsList(Context mContext){

        /**
         * -------------------------------------------
         * [호출 방법] :
         *
         * C_Permission.getAppPermissionsList(A_Intro.this);
         * -------------------------------------------
         * [리턴 데이터] :
         *
         * I/: [LOG :: {
         *       "denied": [
         *         "android.permission.SYSTEM_ALERT_WINDOW",
         *         "android.permission.WRITE_EXTERNAL_STORAGE",
         *         "android.permission.READ_EXTERNAL_STORAGE",
         *         "android.permission.PACKAGE_USAGE_STATS",
         *         "android.permission.FOREGROUND_SERVICE_LOCATION"
         *       ],
         *       "granted": [
         *         "android.permission.READ_PHONE_STATE",
         *         "android.permission.INTERNET",
         *         "android.permission.ACCESS_WIFI_STATE",
         *         "android.permission.CHANGE_WIFI_STATE",
         *         "android.permission.CHANGE_NETWORK_STATE",
         *         "android.permission.ACCESS_NETWORK_STATE",
         *         "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
         *         "android.permission.RECEIVE_BOOT_COMPLETED",
         *         "android.permission.FOREGROUND_SERVICE",
         *         "com.google.android.c2dm.permission.RECEIVE",
         *         "android.permission.CHANGE_WIFI_MULTICAST_STATE",
         *         "com.example.javaproject.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
         *       ]
         *     }]
         * -------------------------------------------
         * */


        // [Context 지정]
        context = mContext;


        // [리턴 변수 선언]
        Map<String, List<String>> returnData = new HashMap<>();


        // [로직 처리 수행 실시]
        try {
            List<String> granted = new ArrayList<>(); // [권한 허용 리스트]
            List<String> denied = new ArrayList<>(); // [권한 거부 리스트]

            
            // [PackageInfo 선언]
            PackageInfo pi = null;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
                pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), PackageManager.PackageInfoFlags.of((long) PackageManager.GET_PERMISSIONS));
            }
            else {
                pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), PackageManager.GET_PERMISSIONS);
            }
            

            // [반복문 수행하면서 권한 확인]
            for (int i = 0; i < pi.requestedPermissions.length; i++) {

                // [and 연산 : 모두 참일 때 true] : [요청 퍼미션 값이 있고, 요청된 권한이 현재 애플리케이션에 부여되어 있는 경우]
                if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
                    granted.add(pi.requestedPermissions[i]); // [허용 리스트 삽입]
                }else {
                    denied.add(pi.requestedPermissions[i]); // [거부 리스트 삽입]
                }
            }

            
            // [리턴 값에 삽입]
            returnData.put("granted", granted);
            returnData.put("denied", denied);
        }
        catch (Exception e){
            e.printStackTrace();
        }


        // [로그 출력]
        //*
        // ===============================================================
        S_Log._D_("앱에 부여된 권한 리스트 확인", new String[]{
                new Gson().newBuilder().setPrettyPrinting().create().toJson(returnData)
        });
        // ===============================================================
        // */


        // [리턴 반환]
        return returnData;
    }

 

반응형
Comments