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/8 15:55:18

Pinokio安装指南:如何快速搭建AI开发环境?

Pinokio安装指南&#xff1a;如何快速搭建AI开发环境&#xff1f; 【免费下载链接】pinokio AI Browser 项目地址: https://gitcode.com/gh_mirrors/pi/pinokio 还在为复杂的AI环境配置而烦恼吗&#xff1f;Pinokio作为一款智能的AI浏览器&#xff0c;能够帮你一键搭建完…

作者头像 李华
网站建设 2026/4/15 3:09:17

LoRA+与LLaMAPro进阶微调技术在ms-swift中的应用

LoRA与LLaMAPro进阶微调技术在ms-swift中的应用 在大模型落地的浪潮中&#xff0c;一个现实问题始终困扰着开发者&#xff1a;如何在有限算力下实现高质量的模型定制&#xff1f;全参数微调虽效果显著&#xff0c;但动辄数十GB显存、多卡A100的需求让大多数团队望而却步。与此同…

作者头像 李华
网站建设 2026/4/15 5:09:39

VeighNa量化交易框架终极指南:从零到一的完整解决方案

VeighNa量化交易框架终极指南&#xff1a;从零到一的完整解决方案 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy 你是否曾经在深夜对着屏幕&#xff0c;试图将复杂的交易逻辑转化为代码&#xff1f;是否在策略回…

作者头像 李华
网站建设 2026/4/15 8:43:20

ms-swift支持Reranker模型训练,为RAG系统提供底层能力

ms-swift 支持 Reranker 模型训练&#xff0c;为 RAG 系统提供底层能力 在构建智能问答系统时&#xff0c;你是否遇到过这样的场景&#xff1a;用户提出一个专业问题&#xff0c;检索模块返回了十几条看似相关的文档片段&#xff0c;但真正能支撑准确回答的却寥寥无几&#xff…

作者头像 李华