• 原文: medium.com/proandroidd…
  • 译者:程序员 DHL
  • 本文已收录于库房 Technical-Article-Translation

这篇文章,首要共享在 Android 14 以上新增的权限 READ_MEDIA_VISUAL_USER_SELECTED,该权限答使用户仅授予对选定媒体的拜访权限(Photos / Videos)),而不是拜访整个媒体库。

新的权限弹窗

当你的 App 运转在 Andrid 14 以上的设备时,假如恳求拜访相片,会出现以下对话框,你将看到新的选项。

Android 14 新增权限

受影响的行为

当咱们在项目中声明新的权限 READ_MEDIA_VISUAL_USER_SELECTED ,而且用户挑选 Select photos and videos(Select photos or Select videos)

  • READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 权限都会被拒绝

  • READ_MEDIA_VISUAL_USER_SELECTED 权限被授予时,将会被答应暂时拜访用户的相片和视频

  • 假如咱们需求拜访其他相片和视频,咱们需求同时请求 READ_MEDIA_IMAGES 或者 READ_MEDIA_VIDEO 权限

如何在项目中运用新的权限

  • AndroidManifest.xml 文件中添加下面的权限
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
// new permisison
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
  • 运用 ActivityResultContract 恳求新的权限
val permissionLauncher =
    rememberLauncherForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { mapResults ->
        mapResults.forEach {
            Log.d(TAG, "Permission: ${it.key} Status: ${it.value}")
        }
        // check if any of the requested permissions is granted or not
        if (mapResults.values.any { it }) {
            // query the content resolver
            queryContentResolver(context) { listOfImages ->
                imageDataModelList = listOfImages
            }
        }
    }

为什么要运用 RequestMultiplePermissions,由于咱们需求同时恳求 READ_MEDIA_IMAGES , READ_MEDIA_VIDEO 权限

  • 发动权限请求流程
OutlinedButton(onClick = {
    permissionLauncher.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED))
}) {
    Text("Allow to read all or select images")
}

关于 Android 12 、 Android 13 、Android 14 功能和权限的变更,点击下方链接前往检查:

  • 快速适配 Android 14

  • Android 13这些权限抛弃,你的使用受影响了吗?

  • Android 12 已来,你的 App 溃散了吗?

最终咱们看一下运转效果


全文到这里就完毕了,感谢你的阅览,坚持原创不易,欢迎在看、点赞、共享给身边的小伙伴,我会继续共享原创干货!!!


我开了一个云同步编译东西(SyncKit),首要用于本地写代码,同步到长途设备,在长途设备上进行编译,最终将编译的结果同步到本地,代码现已上传到 Github,欢迎前往库房 hi-dhl/SyncKit 检查。

  • 库房 SyncKit:https://github.com/hi-dhl/SyncKit
  • 下载地址:https://github.com/hi-dhl/SyncKit/releases

Hi 大家好,我是 DHL,上任于美团、快手、小米。大众号:ByteCode ,共享有用、风趣的硬核原创内容,Kotlin、Jetpack、性能优化、系统源码、算法及数据结构、动画、大厂面经,真诚引荐你关注我。

  • 大众号:ByteCode
  • 哔哩哔哩: space.bilibili.com/498153238
  • : juejin.im/user/259450…
  • 博客: hi-dhl.com
  • Github: github.com/hi-dhl

最新文章

  • 国外大厂面试题, 7 个 Android Lifecycle 重要的知识点
  • Android 13这些权限抛弃,你的使用受影响了吗?
  • Android 12 已来,你的 App 溃散了吗?
  • Android 利器,我开发了云同步编译东西
  • Twitter 上风趣的代码
  • 谁动了我的内存,揭秘 OOM 溃散下降 90% 的隐秘
  • 反射技巧让你的性能提升 N 倍
  • 90%人不懂的泛型局限性,泛型擦除,星投影
  • 揭秘反射真的很耗时吗,射 10 万次耗时多久
  • Google 宣告抛弃 LiveData.observe 方法
  • 影响性能的 Kotlin 代码(一)
  • 揭秘 Kotlin 中的 == 和 ===

开源新项目

  • 云同步编译东西(SyncKit),本地写代码,长途编译,欢迎前去检查 SyncKit

  • KtKit 小巧而有用,用 Kotlin 言语编写的东西库,欢迎前去检查 KtKit

  • 最全、最新的 AndroidX Jetpack 相关组件的实战项目以及相关组件原理剖析文章,正在逐步添加 Jetpack 新成员,库房继续更新,欢迎前去检查 AndroidX-Jetpack-Practice

  • LeetCode / 剑指 offer,包含多种解题思路、时刻复杂度、空间复杂度剖析,在线阅览