Android Kotlin中如何使用Photo Picker重新打开已选中的图片?
如何重新打开Photo Picker并保留已选中的图片
Android系统的Photo Picker在不同版本的支持能力不同,以下分两种场景给出解决方案:
一、Android 14(API 34)及以上版本
从Android 14开始,Photo Picker支持预选中已选择的图片,你可以通过PickVisualMediaRequest.Builder的setSelectedUris()方法,在启动Picker时传入之前保存的已选URI列表,这样打开Picker时这些图片会被自动选中。
修改你启动Picker的代码:
// 基于已保存的urisList构建请求 val pickRequest = PickVisualMediaRequest.Builder() .setMediaType(PickVisualMedia.ImageOnly) .setSelectedUris(urisList) // 传入已选中的图片URI列表 .build() pickMultipleMedia.launch(pickRequest)
注意:传入的URI必须是之前通过Photo Picker获取的有效URI,这类URI的访问权限是持久化的,只要应用未卸载就一直有效。
二、Android 13及以下版本
旧版本的Photo Picker没有预选功能,你需要自行实现“已选图片管理+重新选择”的逻辑:
- 在界面上展示已选中的图片列表,允许用户查看、移除已选内容;
- 当用户再次点击选择按钮时,正常启动Photo Picker,在回调中合并或替换原有URI列表:
调整你的回调代码(以合并新选图片为例):
pickMultipleMedia = registerForActivityResult( ActivityResultContracts.PickMultipleVisualMedia(30) ) { newSelectedUris -> if (newSelectedUris.isNotEmpty()) { // 合并新选图片到原有列表,若要替换则先clear再addAll urisList.addAll(newSelectedUris) multipleImages.notifyDataSetChanged() findImageSize(urisList) binding.root.visibility = View.VISIBLE } // 用户取消选择时,保留原有已选列表即可 }
额外说明:直接打开已选中的图片查看
如果你只是想查看已选中的图片,无需重新打开Photo Picker,直接用获取到的URI加载即可,比如用图片加载库Glide:
// 示例:加载urisList中指定位置的图片 Glide.with(this) .load(urisList[imagePosition]) .into(targetImageView)
内容的提问来源于stack exchange,提问作者Ayaz Muhammad
相关产品推荐
相关产品推荐

