Android 14 新增权限
- 原文: medium.com/proandroidd…
- 译者:程序员 DHL
- 本文已收录于仓库 Technical-Article-Translation
这篇文章,主要分享在 Android 14 以上新增的权限 READ_MEDIA_VISUAL_USER_SELECTED
,该权限允许用户仅授予对选定媒体的访问权限(Photos / Videos)),而不是访问整个媒体库。
新的权限弹窗
当你的 App 运行在 Andrid 14 以上的设备时,如果请求访问照片,会出现以下对话框,你将看到新的选项。
受影响的行为
当我们在项目中声明新的权限 READ_MEDIA_VISUAL_USER_SELECTED
,并且用户选择 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" />
// 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 功能和权限的变更,点击下方链接前往查看:
最后我们看一下运行效果
全文到这里就结束了,感谢你的阅读,坚持原创不易,欢迎在看、点赞、分享给身边的小伙伴,我会持续分享原创干货!!!
我开了一个云同步编译工具(SyncKit),主要用于本地写代码,同步到远程设备,在远程设备上进行编译,最后将编译的结果同步到本地,代码已经上传到 Github,欢迎前往仓库 hi-dhl/SyncKit 查看。
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,包含多种解题思路、时间复杂度、空间复杂度分析,在线阅读
来源:juejin.cn/post/7238762963908689957