news 2026/4/15 18:28:16

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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隐私权限继续加强,做了细分权限。

<uses-permissionandroid:name="android.permission.READ_MEDIA_IMAGES"/><uses-permissionandroid:name="android.permission.READ_MEDIA_AUDIO"/><uses-permissionandroid:name="android.permission.READ_MEDIA_VIDEO"/>

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

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

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

android14阶段

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

<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

当设置了:

//不要设置该参数//.setSandboxFileEngine(new MeSandboxFileEngine())//设置maxSelectNum为int最大值.setMaxSelectNum(Integer.MAX_VALUE)

右上角就有全选模式和取消全选功能。
用于做一些相册导入导出的全选操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 0:46:22

歌声转换入门指南:从零开始的AI音色克隆体验

歌声转换入门指南&#xff1a;从零开始的AI音色克隆体验 【免费下载链接】so-vits-svc 基于vits与softvc的歌声音色转换模型 项目地址: https://gitcode.com/gh_mirrors/sovit/so-vits-svc 你是否曾经想过&#xff0c;如果能让自己的歌声听起来像专业歌手一样动人&#…

作者头像 李华
网站建设 2026/4/16 10:42:49

MonoGame:跨平台游戏开发的终极解决方案

MonoGame&#xff1a;跨平台游戏开发的终极解决方案 【免费下载链接】MonoGame One framework for creating powerful cross-platform games. 项目地址: https://gitcode.com/gh_mirrors/mo/MonoGame 在当今多元化的游戏市场中&#xff0c;开发一款能够运行在多个平台上…

作者头像 李华
网站建设 2026/4/13 4:17:21

DelphiMVCFramework实战指南:7天构建高性能REST API

DelphiMVCFramework实战指南&#xff1a;7天构建高性能REST API 【免费下载链接】delphimvcframework DMVCFramework (for short) is a popular and powerful framework for WEB API in Delphi. Supports RESTful and JSON-RPC WEB APIs development. 项目地址: https://gitc…

作者头像 李华
网站建设 2026/4/4 10:59:29

Instant Meshes终极指南:3D网格重拓扑的革命性突破

Instant Meshes终极指南&#xff1a;3D网格重拓扑的革命性突破 【免费下载链接】instant-meshes Interactive field-aligned mesh generator 项目地址: https://gitcode.com/gh_mirrors/in/instant-meshes 在当今影视特效和游戏开发领域&#xff0c;3D模型优化已成为制作…

作者头像 李华
网站建设 2026/4/11 0:54:43

acme-tiny:200行代码实现Let‘s Encrypt证书自动化管理

acme-tiny&#xff1a;200行代码实现Lets Encrypt证书自动化管理 【免费下载链接】acme-tiny A tiny script to issue and renew TLS certs from Lets Encrypt 项目地址: https://gitcode.com/gh_mirrors/ac/acme-tiny 在当今互联网环境中&#xff0c;HTTPS加密已成为网…

作者头像 李华