您现在的位置是:首页 >学无止境 >Android14新权限机制网站首页学无止境

Android14新权限机制

Calvin880828 2023-07-13 20:00:02
简介Android14新权限机制

Android14新权限机制

new-permission-policy for android 14
在本文中,我们将了解 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_IMAGESREAD_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_IMAGESREAD_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")
}

new-permission-dialog
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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。