You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:02:33