Android应用添加PhotoPicker遇类型不匹配错误,应用仍可运行
问题
我想在Android应用中添加PhotoPicker,从Android官方文档获取了如下代码片段:
ActivityResultLauncher<PickVisualMediaRequest> pickMultipleMedia = registerForActivityResult(new PickMultipleVisualMedia(5), uris -> { // Callback is invoked after the user selects media items or closes the // photo picker. if (!uris.isEmpty()) { Log.d("PhotoPicker", "Number of items selected: " + uris.size()); } else { Log.d("PhotoPicker", "No media selected"); } }); pickMultipleMedia.launch(new PickVisualMediaRequest.Builder() .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE) .build());
但出现如下错误:
'setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType)' in 'androidx.activity.result.PickVisualMediaRequest.Builder' cannot be applied to '(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly)'
尽管应用仍能正常运行,但我无法解决这个错误提示。
解决方案
这个错误源于ImageOnly.INSTANCE的类型与setMediaType方法要求的VisualMediaType不匹配,通常是依赖版本不一致导致的,可通过以下两种方式修复:
方法1:使用兼容的媒体类型实例
将ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE替换为符合VisualMediaType类型的实例,比如指定单类型媒体:
pickMultipleMedia.launch(new PickVisualMediaRequest.Builder() .setMediaType(ActivityResultContracts.PickVisualMedia.SingleMimeType("image/*")) .build());
如果需要同时支持图片和视频选择,可使用:
.setMediaType(ActivityResultContracts.PickVisualMedia.ImageAndVideo.INSTANCE)
方法2:更新依赖版本
确保项目中activity相关依赖为最新稳定版,在Module级别的build.gradle中更新:
dependencies { implementation 'androidx.activity:activity:1.8.2' implementation 'androidx.activity:activity-ktx:1.8.2' }
同步项目后,类型不匹配的错误提示会自动消失。
补充说明
旧版本的PickVisualMedia组件中,ImageOnly的类型定义未与VisualMediaType对齐,新版本已调整了类型结构,因此更新依赖或替换兼容的媒体类型参数,即可解决该问题。
内容的提问来源于stack exchange,提问作者Harsh Master
相关产品推荐
相关产品推荐

