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

如何解决android.provider.MediaStore#ACTION_PICK_IMAGES需R Extensions SDK 2版本问题

解决MediaStore.ACTION_PICK_IMAGES的版本兼容报错

报错原因

MediaStore.ACTION_PICK_IMAGES 是Android 13(API级别33)新增的图片选择API,它要求项目依赖的R Extensions SDK版本至少为2,你的项目当前最小SDK扩展版本设置为0,导致API调用不兼容。

解决方法

方案一:保留使用ACTION_PICK_IMAGES并适配版本

  1. 升级R Extensions SDK版本
    在模块的build.gradle(或build.gradle.kts)中,修改android配置块,添加或更新compileSdkExtension为2:
android {
    compileSdk 33
    compileSdkExtension 2 // 必须设置为2及以上
    // 其他配置(如minSdkVersion、targetSdkVersion等)
}
  1. 兼容低版本系统
    如果你的App需要支持Android 13以下的设备,必须添加版本判断,在低版本系统中回退到旧的图片选择逻辑:
Intent intent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    // Android 13及以上使用ACTION_PICK_IMAGES
    intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
} else {
    // 低版本使用ACTION_GET_CONTENT
    intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    // 按需设置是否允许多选,默认单选则可省略此行
    // intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);
}
resultLauncher.launch(intent);

方案二:改用旧版图片选择API(无需升级SDK)

如果不想调整SDK版本,直接替换为兼容所有版本的ACTION_GET_CONTENT API:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
// 如需允许多选,添加以下代码
// intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
resultLauncher.launch(intent);

注意事项

  • 使用ACTION_PICK_IMAGES时,Android 13及以上系统无需申请READ_MEDIA_IMAGES权限;而旧版API在Android 13以下设备中,若需访问外部存储的图片,需要申请READ_EXTERNAL_STORAGE权限。
  • 两种API返回的Uri解析逻辑略有差异,处理返回结果时需注意适配。

内容的提问来源于stack exchange,提问作者Rom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:15:02