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)

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

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

相关推荐
crmscs33 分钟前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob36 分钟前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔40 分钟前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei99640 分钟前
flutter和Android动画的对比
android·flutter·动画
lxysbly3 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首3 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-19436 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
Jinkxs6 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&6 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
LDORntKQH6 小时前
基于深度强化学习的混合动力汽车能量管理策略 1.利用DQN算法控制电池和发动机发电机组的功率分配 2
android