uni-app无法访问相册报错
uni-app无法访问相册报错
测试过的手机
HarmonyOS: 4.2.0, 手机厂商: 华为, 手机机型: nova 11。
安卓版本: 11, 手机厂商: 小米, 手机机型: Mi9 Pro 5G。
示例代码
uni.chooseMedia({
count: 9,
mediaType: ['mix'],
sourceType: ['album'],
maxDuration: 60,
camera: 'back',
sizeType: ['original', 'compressed'],
success: async (res) => {
...逻辑代码....
}
})
操作步骤
在安卓手机上执行代码示例。注:需要自定义基座!
预期结果
无报错
实际结果
报错
Error: targetMethod error::java.lang.IllegalStateException: Please register the android:requestLegacyExternalStorage=“true” attribute in the AndroidManifest.xml file, otherwise it will cause incompatibility with the old version
bug描述
Error: targetMethod error::java.lang.IllegalStateException: Please register the android:requestLegacyExternalStorage=“true” attribute in the AndroidManifest.xml file, otherwise it will cause incompatibility with the old version
更多关于uni-app无法访问相册报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该bug反馈内容完整且有效。问题描述清晰明确,错误信息指出需在AndroidManifest.xml中添加android:requestLegacyExternalStorage=“true"属性;代码示例完整可直接运行;复现步骤简洁(安卓手机执行即可);预期结果合理;实际结果确为真实报错;分类信息齐全(含HBuilderX 4.87、Android 11等关键版本信息)。
经核查知识库,此问题非uni-app本身bug,而是Android 11存储机制变更导致的兼容性现象。Google自Android 10起推行分区存储(Scoped Storage),Android 11强制要求应用适配。错误提示明确要求添加该属性以维持旧版存储访问方式。知识库中真机运行常见问题已说明"Android 11部分手机真机运行文件同步失败的问题,请升级HBuilderX到3.1.19+版本”,而用户使用的4.87版本远高于此,说明框架层面已支持,但需开发者手动配置。
解决方案:
在manifest.json的"app-plus"->“android"节点添加"requestLegacyExternalStorage”: true
或直接在AndroidManifest.xml中添加android:requestLegacyExternalStorage=“true”
注意Google Play政策要求新应用必须适配分区存储,此属性仅作临时过渡
该反馈质量高,精准定位Android平台特性问题,非误报。建议用户按文档配置即可解决,无需等待框架更新。 内容为 AI 生成,仅供参考
更多关于uni-app无法访问相册报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我这边标准基座没办法复现,有什么其他条件能复现问题?
自定义基座就复现了
这个错误是由于Android 10(API 29)及以上版本引入了作用域存储(Scoped Storage)机制导致的。当你的应用在Android 10+设备上尝试访问外部存储(如相册)时,如果未正确配置,就会触发此异常。
解决方案:
-
修改
AndroidManifest.xml文件 在manifest标签内添加android:requestLegacyExternalStorage="true"属性:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:requestLegacyExternalStorage="true">这会让应用以旧版存储模式运行,暂时绕过作用域存储限制。
-
注意Android版本兼容性
- 该属性仅对Android 10(API 29)生效,Android 11(API 30)+ 会忽略此属性
- 如果目标API为30+,需要改用新的存储权限策略
-
Android 11+的适配方案 对于Android 11及以上版本,需要在
manifest中添加以下权限声明:<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />并在代码中动态申请权限:
// 检查是否有管理外部存储权限 if (plus.os.name === 'Android' && parseInt(plus.os.version) >= 11) { const result = await uni.getSystemSetting({ key: 'manageExternalStorage' }); if (!result) { // 跳转到设置页面让用户手动开启 plus.runtime.openURL('package:' + plus.runtime.appid); } } -
重新制作自定义基座 修改配置文件后,必须重新制作自定义基座并安装到测试设备,修改才会生效。
补充建议:
- 确保已正确声明相册访问权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

