Android 11에서 추가되었던 권한 자동삭제 기능을 대응하는 로직.
기존까진 문제가 없어서 추가하지 않고 있다가 최근에 권한 자동 삭제 기능으로 추정되는 문제가 발생해 추가하면서 로그성 포스팅입니다.
이 기능에 영향을 받는 권한은 런타임 권한으로, 흔히 앱에서 shouldShowRequestPermissionRationale을 이용해 사용자에게 허락을 구하는 권한들이 영향을 받게됩니다.
Android 11용 API
- Android 11이상에서만 동작하는 로직입니다.
fun autoRevokePermissionCheck(context: Context) {
val TAG = "autoRevokePermissionCheck"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!context.packageManager.isAutoRevokeWhitelisted) {
Log.d(TAG, "AUTO_REVOKE_PERMISSION : FALSE -> 사용하지 않는 앱 권한 삭제 기능 사용 중. 설정 화면으로 이동")
val intent = Intent(Intent.ACTION_AUTO_REVOKE_PERMISSIONS)
intent.data = Uri.fromParts("package", context.packageName, null)
context.startActivity(intent)
}
else {
Log.d(TAG, "AUTO_REVOKE_PERMISSION : TRUE -> 사용하지 않는 앱 권한 삭제 기능 화이트리스트 등록됨.")
}
}
}
크로스 플랫폼 API
2021년 12월 부터 Android11이상을 포함한 Android 6.0부터 10버전까지의 모든 안드로이드에서 Google Play Services를 통해 기능이 확대되어 Android 6.0이상을 지원하는 앱에선 해당 로직을 사용하면 됩니다.
fun autoRevokePermissionCheck(context: Context, activity: Activity) {
val TAG = "autoRevokePermissionCheck"
val future = PackageManagerCompat.getUnusedAppRestrictionsStatus(context)
future.addListener({
when (future.get()) {
UnusedAppRestrictionsConstants.DISABLED -> {
Log.d(TAG, "AUTO_REVOKE_PERMISSION : TRUE -> 사용하지 않는 앱 권한 삭제 기능 화이트리스트 등록됨.")
}
UnusedAppRestrictionsConstants.API_30_BACKPORT,
UnusedAppRestrictionsConstants.API_30,
UnusedAppRestrictionsConstants.API_31 -> {
Log.d(TAG, "AUTO_REVOKE_PERMISSION : FALSE -> 사용하지 않는 앱 권한 삭제 기능 사용 중. 설정 화면으로 이동")
val intent = IntentCompat.createManageUnusedAppRestrictionsIntent(context, context.packageName)
activity.startActivityForResult(intent, MasterActivity.AUTO_REVOKE_PERMISSION)
}
}
}, ContextCompat.getMainExecutor(context))
}
위의 크로스 플랫폼 API는 Jetpack Core 라이브러리 v1.7.0 이상에서 지원됩니다.
// build.gradle
implementation "androidx.core:core-ktx:$core_version"
implementation "com.google.guava:guava:31.0.1-android"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.0"
// To use CallbackToFutureAdapter
implementation "androidx.concurrent:concurrent-futures:1.1.0"
반응형
'DEV > JAVA&Android' 카테고리의 다른 글
[Kotlin] 한글 영문 변환(kor2eng) (0) | 2023.04.05 |
---|---|
[Android] Android Studio 3.0에서 Layout Preview 오류 (0) | 2017.12.21 |
[Android] 다이얼로그 소프트키보드 열지 않기 (0) | 2017.11.16 |
[Android] 키보드 숨기기, 키보드 자동실행 막기 (0) | 2017.10.20 |
[안드로이드] EditText InputType 속성값 종류 (0) | 2017.07.07 |