uniapp中如何解决android.permission.read_media_images和read_media_videos权限问题
在uniapp开发中,如何正确处理Android 13新增的android.permission.READ_MEDIA_IMAGES和READ_MEDIA_VIDEOS权限?
我的应用需要访问用户相册中的图片和视频,在Android 13以下版本使用READ_EXTERNAL_STORAGE权限正常,但升级到Android 13后无法获取媒体文件。已尝试在manifest.json中配置权限并动态申请,依然提示权限被拒绝。
请问:
- uniapp是否需要特殊配置来适配这两个新权限?
- 动态申请时正确的权限字符串是什么?是否需要同时保留旧权限兼容低版本?
- 是否有完整的代码示例(包括manifest配置和运行时处理)?
测试设备为Android 13系统,HBuilderX版本3.6.18。
2 回复
在Uniapp中,需要在manifest.json的App权限配置中添加以下权限:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
同时使用uni.requestPermissions API动态申请权限,适配Android 13+。
在 UniApp 中,Android 13(API 33)及以上版本引入了 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEOS 权限,用于替代之前的存储权限。以下是解决方案:
1. 配置权限
在 manifest.json 中添加权限声明:
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"android.permission.READ_MEDIA_IMAGES",
"android.permission.READ_MEDIA_VIDEOS"
]
}
}
}
}
2. 动态申请权限
在代码中动态请求权限:
// 检查权限
uni.authorize({
scope: 'scope.READ_MEDIA_IMAGES', // 或 'scope.READ_MEDIA_VIDEOS'
success() {
console.log('权限已授权');
},
fail() {
// 引导用户手动开启
uni.showModal({
content: '需要媒体权限,请手动开启',
success: (res) => {
if (res.confirm) {
uni.openAppAuthorizeSetting(); // 跳转权限设置页
}
}
});
}
});
3. 兼容低版本
对于 Android 12 及以下,仍需使用 READ_EXTERNAL_STORAGE:
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"android.permission.READ_EXTERNAL_STORAGE", // 兼容旧版
"android.permission.READ_MEDIA_IMAGES",
"android.permission.READ_MEDIA_VIDEOS"
]
}
}
}
}
4. 注意事项
- Android 13+:必须声明
READ_MEDIA_IMAGES和READ_MEDIA_VIDEOS才能访问媒体文件。 - Android 12及以下:继续使用
READ_EXTERNAL_STORAGE。 - 使用
uni.chooseImage等 API 时,UniApp 会自动处理权限申请,但需确保权限已声明。
通过以上步骤即可解决权限问题。

