如何解决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并适配版本
- 升级R Extensions SDK版本
在模块的build.gradle(或build.gradle.kts)中,修改android配置块,添加或更新compileSdkExtension为2:
android { compileSdk 33 compileSdkExtension 2 // 必须设置为2及以上 // 其他配置(如minSdkVersion、targetSdkVersion等) }
- 兼容低版本系统
如果你的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
相关产品推荐
相关产品推荐

