news 2026/9/3 0:42:01

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/9/2 8:02:51

基于ms-swift解析Git Commit message提取变更摘要

基于 ms-swift 解析 Git Commit Message 实现变更摘要自动生成 在现代软件研发流程中&#xff0c;版本控制系统如 Git 已成为协作开发的基石。然而&#xff0c;随着项目规模扩大、提交频率上升&#xff0c;如何从海量 commit message 中快速提取关键信息&#xff0c;成为提升团…

作者头像 李华
网站建设 2026/9/2 23:34:45

ms-swift集成vLLM推理加速,提升大模型吞吐量2倍以上

ms-swift集成vLLM推理加速&#xff0c;提升大模型吞吐量2倍以上 在当前AI应用快速落地的浪潮中&#xff0c;一个现实问题正摆在每个工程团队面前&#xff1a;如何让动辄数十亿参数的大语言模型&#xff0c;在真实业务场景下既“跑得快”又“撑得住”&#xff1f;尤其是在智能客…

作者头像 李华
网站建设 2026/8/26 0:34:54

AI架构师必备技能:数据架构现代化设计模式

AI架构师必修课&#xff1a;数据架构现代化的6大核心设计模式 标题选项 《AI架构师必备&#xff1a;数据架构现代化的6大核心设计模式》《从传统到AI&#xff1a;数据架构现代化设计模式全解析》《AI时代数据架构怎么搭&#xff1f;这6种设计模式你必须会》《数据架构现代化&am…

作者头像 李华
网站建设 2026/8/25 20:41:46

基于ARM Cortex-M的Keil工控工程创建指南

从零搭建工业级嵌入式工程&#xff1a;手把手教你用Keil点亮第一颗ARM Cortex-M芯片你有没有过这样的经历&#xff1f;买回一块STM32开发板&#xff0c;打开Keil&#xff0c;点了几下“New Project”&#xff0c;结果编译报错一堆头文件找不到&#xff1b;好不容易加上路径&…

作者头像 李华
网站建设 2026/9/2 23:23:53

5大核心步骤:DeepFaceLive实时面部交换应用完整使用指南

5大核心步骤&#xff1a;DeepFaceLive实时面部交换应用完整使用指南 【免费下载链接】DeepFaceLive Real-time face swap for PC streaming or video calls 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFaceLive 还在为直播和视频会议中的面部特效功能而烦恼…

作者头像 李华
网站建设 2026/9/2 21:02:40

星火应用商店:轻松玩转Linux软件世界的智能助手

星火应用商店&#xff1a;轻松玩转Linux软件世界的智能助手 【免费下载链接】星火应用商店Spark-Store 星火应用商店是国内知名的linux应用分发平台&#xff0c;为中国linux桌面生态贡献力量 项目地址: https://gitcode.com/spark-store-project/spark-store 还在为Linu…

作者头像 李华