PictureSelector android的发展和我修改全选功能

fork from https://github.com/buhuiming/PictureSelector

fork from https://github.com/LuckSiege/PictureSelector

PictureSelector

背景

android的图片选择器的发展故事是这样的:

蛮荒时代

该有的权限申请一下即可。应用内显示。

在这个阶段,PictureSelector发展壮大,几乎成为了开源图片选择器的唯一选择。

主要就是查询相册,将content://media/external/images/media/12345, content://media/external/video/media/12346 等图片,视频,音频做显示,库内部做了极多的参数配置,极多的Engine提供给开发者去定制比如图片加载器,播放器加载器,还考虑异步加载,快速加载,样式等方方面面。

android10~android13阶段

应用无法通过WRITE_EXTERNAL_STORAGE权限,随意往外置目录写入;

  • 需要使用MediaStore.Images/MediaStore.Video/MediaStore.Audio来写回系统的相册;

  • 或者android:requestLegacyExternalStorage="true" (targetSdkVersion=29) 仅限android10。而且api 32,已经彻底移除;

  • 或者ActivityResultContracts.OpenDocumentTree()来做目录选择授权,但是可能需要二次申请。

图片选择框架,需要追加一堆权限申请,并且逐渐抛弃/兼容WRITE_EXTERNAL_STORAGE。

android13阶段

Google隐私权限继续加强,做了细分权限。

xml 复制代码
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

这个时候开始,已经不推荐使用第三方的图库选择框架了。推荐使用ActivityResultContract + PickVisualMediaRequest 后续简称Picker。

对于非相册类app,googlePlay推荐,使用ActivityResultContract + PickVisualMediaRequest。

会弹出一个好看的底部弹窗选择器。如果android12系统不支持的话,会调用到一个稍微难看的文件浏览器的界面,也算能往下兼容(如果是海外GMS框架下,会有兼容的picker支持)。

android14阶段

Google又加强了一把,弄了一个选择图册的时候,弹出一个先勾选临时的相册,再传递给应用去pick:

kotlin 复制代码
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />

android15阶段

需要兼容沉浸式。其实在android13-14也在逐步加强,到android15/16强制。

现在的情况

原项目LuckSiege/PictureSelector 最后的版本v3.11.2 定格在:Dec 17, 2023。

好在对于android14的细分权限也已经支持。没有对于android15的沉浸式加强。

buhuiming/PictureSelector 进行了fork主要修正android15的沉浸式。

现在对于非普通应用,使用ActivityResultContract + PickVisualMediaRequest,又简单又轻松,而且重要的是,你的应用压根不需要任何权限。

我也fork了这个项目,做了修改:

https://github.com/jzlhll/PictureSelector.git

当设置了:

java 复制代码
//不要设置该参数
//.setSandboxFileEngine(new MeSandboxFileEngine())

//设置maxSelectNum为int最大值
.setMaxSelectNum(Integer.MAX_VALUE)

右上角就有全选模式和取消全选功能。

用于做一些相册导入导出的全选操作。

相关推荐
方白羽3 小时前
Android 双开环境底层剖析与风控检测落地
android·安全·app
weixin_563371474 小时前
Android Studio 2024 版 Device Explorer 打开方法
android·ide·android studio
AIsoft_86897 小时前
职场音频文件怎么整理?录音APP有哪些用法
android·音视频
booboosui7 小时前
第一批个人 Agent 用户正在卸载,问题不在模型,在它住在哪儿
android
洞见前行7 小时前
点击图标到内容出现,你的 App 在这几秒里做了什么:Android 冷启动全链路优化实战
android·性能优化·android studio
凯基迪科技7 小时前
芯片UID绑定修改 加密与逆向修改思路分析
android
Liben8 小时前
Weex开发踩坑记录
android·前端·ios
救救孩子把10 小时前
结构化输出为何“格式正确、答案错误”?JSON Schema 的能力边界
android·java·json·agent·agent服务
张小姐的猫11 小时前
【MySQL】事务
android·mysql·adb
你看我名字11 小时前
数眼智能 Search + Reader 实战:联网问答怎样避免“搜到了,却引用错了”
android·java·开发语言