uniapp中如何解决android.permission.read_media_images和read_media_videos权限问题

在uniapp开发中,如何正确处理Android 13新增的android.permission.READ_MEDIA_IMAGESREAD_MEDIA_VIDEOS权限?

我的应用需要访问用户相册中的图片和视频,在Android 13以下版本使用READ_EXTERNAL_STORAGE权限正常,但升级到Android 13后无法获取媒体文件。已尝试在manifest.json中配置权限并动态申请,依然提示权限被拒绝。

请问:

  1. uniapp是否需要特殊配置来适配这两个新权限?
  2. 动态申请时正确的权限字符串是什么?是否需要同时保留旧权限兼容低版本?
  3. 是否有完整的代码示例(包括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_IMAGESREAD_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_IMAGESREAD_MEDIA_VIDEOS 才能访问媒体文件。
  • Android 12及以下:继续使用 READ_EXTERNAL_STORAGE
  • 使用 uni.chooseImage 等 API 时,UniApp 会自动处理权限申请,但需确保权限已声明。

通过以上步骤即可解决权限问题。

回到顶部