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 会自动处理权限申请,但需确保权限已声明。
通过以上步骤即可解决权限问题。
 
        
       
                     
                   
                    

