hi 大家好,我是 DHL。大众号:ByteCode ,专注共享最新技能原创文章,触及 Kotlin、Jetpack、算法动画、数据结构、体系源码、 LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题等等。
- 原文: medium.com/androiddeve…
- 译者:程序员 DHL
- 本文已收录于库房 Technical-Article-Translation
无论是更改个人头像、共享相片、仍是在电子邮件中增加附件,挑选和共享媒体文件是用户最常见的操作之一。在听取了 Android 用户反应之后,咱们对应用程序拜访媒体文件的办法做了一些改动。
Android 13 已被抛弃的权限
许多用户告诉咱们,文件和媒体权限让他们很困扰,因为他们不知道应用程序想要拜访哪些文件。
在 Android 13 上抛弃了 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
权限,用更好的文件拜访办法代替这些抛弃的 API。
从 Android 10 开始向同享存储中增加文件不需求任何权限。因而,假如你的 App 只在同享存储中增加文件,你能够停止在 Android 10+ 上请求任何权限。
在之前的体系版本中 App 需求请求 READ_EXTERNAL_STORAGE
权限拜访设备的文件和媒体,然后挑选自己的媒体挑选器,这为开发者增加了开发和保护成本,另外 App 依赖于经过 ACTION_GET_CONTENT
或者 ACTION_OPEN_CONTENT
的体系文件挑选器,可是咱们从开发者那里了解到,它感觉没有很好地集成到他们的 App 中。
图片挑选器
在 Android 13 中,咱们引进了一个新的媒体东西 Android 相片挑选器。该东西为用户供给了一种挑选媒体文件的办法,而不需求颁发对其整个媒体库的拜访权限。
它供给了一个简练界面,展现相片和视频,依照日期排序。另外在 “Albums” 页面,用户能够依照屏幕截图或下载等等分类浏览,经过指定一些用户是否仅看到相片或视频,也能够设置挑选最大文件数量,也能够依据自己的需求定制相片挑选器。简而言之,这个相片挑选器是为私人规划的,具有洁净和简练的 UI 易于实现。
咱们还经过谷歌 Play 体系更新 (2022 年 5 月 1 日发布),将相片挑选器反向移植到 Android 11 和 12 上,以将其带给更多的 Android 用户。
开发一个相片挑选器是一个杂乱的项目,新的相片挑选器不需求团队进行任何保护。咱们已经在 ActivityX 1.6.0
版本中为它创立了一个 ActivityResultContract
。假如相片挑选器在你的体系上可用,将会优先运用相片挑选器。
// Registering Photo Picker activity launcher with a max limit of 5 items
val pickMultipleVisualMedia = registerForActivityResult(PickMultipleVisualMedia(5)) { uris ->
// TODO: process URIs
}
// Launching the photo picker (photos & video included)
pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))
假如希望增加类型进行筛选,能够选用这种办法。
// Launching the photo picker (photos only)
pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly))
// Launching the photo picker (video only)
pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))
// Launching the photo picker (GIF only)
pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType("image/gif")))
能够调用 isPhotoPickerAvailable
办法来验证在当时设备上相片挑选器是否可用。
ACTION_GET_CONTENT 将会产生改动
正如你所见,运用新的相片挑选器只需求几行代码。尽管咱们希望一切的 Apps 都运用它,但在 App 中搬迁可能需求一些时刻。
这就是为什么咱们运用 ACTION_GET_CONTENT
将体系文件挑选器转换为相片挑选器,而不需求进行任何代码更改,从而将新的相片挑选器引进到现有的 App 中。
针对特定场景的新权限
尽管咱们强烈建议您运用新的相片挑选器,而不是拜访一切媒体文件,可是您的 App 可能有一个场景,需求拜访一切媒体文件(例如图库相片备份)。对于这些特定的场景,咱们将引进新的权限,以供给对特定类型的媒体文件的拜访,包含图画、视频或音频。您能够在文档中阅览更多关于它们的内容。
假如用户之前颁发你的应用程序 READ_EXTERNAL_STORAGE
权限,体系会主动颁发你的 App 拜访权限。不然,当你的 App 请求任何新的权限时,体系会显现一个面向用户的对话框。
所以您必须始终检查是否仍然颁发了权限,而不是存储它们的颁发状态。
下面的决策树能够帮助您更好的浏览这些更改。
咱们许诺在保护用户隐私的一起,继续改进相片挑选器和整体存储开发者体会,以创立一个安全透明的 Android 生态体系。
新的相片挑选器被反向移植到一切 Android 11 和 12 设备,不包含 Android Go 和非 gms 设备。
全文到这儿就完毕了,感谢你的阅览,坚持原创不易,欢迎在看、点赞、共享给身边的小伙伴,我会继续共享原创干货!!!
真诚推荐你重视我,大众号:ByteCode ,继续共享硬核原创内容,Kotlin、Jetpack、功能优化、体系源码、算法及数据结构、动画、大厂面经。
我开了一个云同步编译东西(SyncKit),主要用于本地写代码,然后同步到长途设备,在长途设备上进行编译,最将编译的结果同步到本地,代码已经上传到 Github,欢迎前往库房 hi-dhl/SyncKit 检查。
- 库房 SyncKit:https://github.com/hi-dhl/SyncKit
- 下载地址:https://github.com/hi-dhl/SyncKit/releases
哔哩哔哩 | 博客 | Github |
近期必读热门文章
- Android 利器,我开发了云同步编译东西
- Twitter 上风趣的代码
- 谁动了我的内存,揭秘 OOM 崩溃下降 90% 的隐秘
- 反射技巧让你的功能提升 N 倍
- 90%人不懂的泛型局限性,泛型擦除,星投影
- 90%的人都不知道的知识点,Kotlin 和 Java 的协变和逆变
- 揭秘反射真的很耗时吗,射 10 万次耗时多久
- Android 12 已来,你的 App 崩溃了吗?
- Google 宣布抛弃 LiveData.observe 办法
- 影响功能的 Kotlin 代码(一)
- 揭秘 Kotlin 中的 == 和 ===
开源新项目
-
云同步编译东西(SyncKit),本地写代码,长途编译,欢迎前去检查 SyncKit
-
KtKit 小巧而实用,用 Kotlin 言语编写的东西库,欢迎前去检查 KtKit
-
AndroidX Jetpack 相关组件的实战项目以及相关组件原理剖析文章,正在逐渐增加 Jetpack 新成员,库房继续更新,欢迎前去检查 AndroidX-Jetpack-Practice
-
LeetCode / 剑指 offer,包含多种解题思路、时刻杂乱度、空间杂乱度剖析,在线阅览