Android14新权限机制
Android14新权限机制
在本文中,我们将了解 Android14 的新权限,该权限允许用户仅授予对选定媒体(照片/视频)的访问权限,而不是整个库。
这个新权限允许用户在我们的应用程序运行时授予部分访问权限 mediaAndroid14 or higher
新权限对话框
它有3个选项
您将看到新选项反映了您的要求。如果用户请求照片,将出现以下对话框。
声明新权限的效果
通过声明
READ_MEDIA_VISUAL_USER_SELECTED
,我们让权限控制器知道我们的应用程序支持手动重新请求选择更多媒体。
对行为的影响
当我们声明READ_MEDIA_VISUAL_USER_SELECTED
这个新权限和用户时selects Select photos and videos(Select photos or Select videos)
:
READ_MEDIA_IMAGES
权限和READ_MEDIA_VIDEO
都被拒绝了READ_MEDIA_VISUAL_USER_SELECTED
授予权限✅ ,提供部分和临时访问用户的照片和视频(照片或视频)- 稍后,如果我们需要访问其他照片和视频,我们必须手动 请求
READ_MEDIA_IMAGES
或READ_MEDIA_VIDEO
权限(或两者)。
实现
- 将以下权限添加到AndroidManifest.xml
< uses-permission android:name = "android.permission.READ_MEDIA_IMAGES" />
// 新权限
< uses-permission android:name = "android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
- 使用请求权限
ActivityResultContract
我们需要使用READ_MEDIA_IMAGES
和READ_MEDIA_VIDEO
权限进行请求,所以我们使用RequestMultiplePermissions
。
val permissionLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { mapResults ->
mapResults.forEach {
Log.d(TAG, "Permission: ${it.key} Status: ${it.value} " )
}
// 检查是否有请求的权限是否被授予
if (mapResults.values.any { it }) {
// 查询内容解析器
queryContentResolver(context) { listOfImages ->
imageDataModelList = listOfImages
}
}
}
- 发起权限请求
OutlinedButton(onClick = {
permissionLauncher.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED))
}) {
Text("Allow to read all or select images")
}
Demo示例代码:
https://github.com/navczydev/Android14Samples/tree/more-permisisons
参考
https://android-developers.googleblog.com/2023/03/android-14-developer-preview-2.html
https://developer.android.com/about/versions/14/changes/partial-photo-video-access