투케이2K

444. (kotlin/코틀린) [유틸 파일] getAppPermissionsList - 앱에 부여된 퍼미션 권한 리스트 확인 본문

Kotlin

444. (kotlin/코틀린) [유틸 파일] getAppPermissionsList - 앱에 부여된 퍼미션 권한 리스트 확인

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

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

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

            /**
             * -------------------------------------------
             * [호출 방법] :
             *
             * 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


            // [리턴 변수 선언]
            val returnData: MutableMap<String, List<String>> = HashMap()


            // [로직 처리 수행 실시]
            try {

                val granted: MutableList<String> = ArrayList() // [권한 허용 리스트]
                val denied: MutableList<String> = ArrayList() // [권한 거부 리스트]


                // [PackageInfo 선언]
                var pi: PackageInfo? = null
                pi = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                    mContext.packageManager.getPackageInfo(mContext.packageName, PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS.toLong()))
                } else {
                    mContext.packageManager.getPackageInfo(mContext.packageName, PackageManager.GET_PERMISSIONS)
                }


                // [반복문 수행하면서 권한 확인]
                for (i in pi!!.requestedPermissions.indices) {

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


                // [리턴 값에 삽입]
                returnData["granted"] = granted
                returnData["denied"] = denied

            } catch (e: Exception) {
                e.printStackTrace()
            }


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


            // [리턴 반환]
            return returnData
        }

 

반응형
Comments