Android Photo Picker如何预设已选中URI的勾选状态?
问题背景
代码说明一
创建请求打开图片和视频选择器,选择后在监听器中返回URI列表:
PickVisualMediaRequest request = new PickVisualMediaRequest.Builder() .setMediaType(ActivityResultContracts.PickVisualMedia.ImageAndVideo.INSTANCE) .build(); pickVisualMediaRequestActivityResultLauncher.launch(request);
代码说明二
注册Activity结果监听器,在用户通过Photo Picker选择媒体后执行:
pickVisualMediaRequestActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.PickMultipleVisualMedia(10), result -> { //Handling Here what to do with result (List<Uri>) } );
问题描述
在PickMultipleVisualMedia构造函数中设置了最多选择10个媒体文件,用户选择5个后返回本地预览界面,后续再选择剩余5个时,无法让已选的5个URI在Photo Picker中自动勾选,也找不到可传入已选URI的方法,用户需重新选择全部10个文件,请问是否有解决方案?
解决方案
目前AndroidX提供的PickMultipleVisualMedia确实没有支持传入已选URI进行预勾选的官方API,不过可以通过以下方式优化用户体验:
本地维护已选媒体列表
在应用内部保存用户已选择的URI(可通过全局变量、ViewModel或持久化存储实现),在本地预览界面展示这些已选内容并允许用户删除;再次打开Photo Picker时,将最大可选数量调整为10 - 已选数量,用户完成新选择后,将新返回的URI列表与之前保存的列表合并,即可得到完整的媒体选择列表。自定义媒体选择器(替代方案)
如果对预勾选功能有强需求,可以基于MediaStore实现自定义媒体选择器,完全控制选择状态的保存与恢复,不过该方案需要额外开发UI并处理媒体权限,适合对交互有特殊要求的场景。
内容的提问来源于stack exchange,提问作者WuzerHaun
相关产品推荐
相关产品推荐

