uni-app uni.chooseImage 在安卓13以上版本,第一次允许授权后选择图片仍然返回没有权限的问题 TagVersion33

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app uni.chooseImage 在安卓13以上版本,第一次允许授权后选择图片仍然返回没有权限的问题 TagVersion33

3 回复

请问下解决了吗,我也遇到了这个问题


安卓 33 暂时先每次chooseImage 之前先用plus去检查权限,获取权限

在 Android 13(API 级别 33)及以上版本中,权限管理机制发生了变化,特别是对于媒体文件(如图片、视频、音频)的访问权限。Android 13 引入了更细粒度的媒体权限控制,要求应用明确请求访问特定类型的媒体文件(如 READ_MEDIA_IMAGESREAD_MEDIA_VIDEOREAD_MEDIA_AUDIO)。

如果你在使用 uni.chooseImage 时遇到第一次允许授权后仍然返回没有权限的问题,可能是由于以下原因:

1. 权限未正确请求

在 Android 13 及以上版本,应用需要明确请求 READ_MEDIA_IMAGES 权限才能访问用户的图片。你需要在 manifest.json 文件中声明这些权限,并在运行时请求它们。

manifest.json 中添加权限:

{
  "permission": {
    "android.permission.READ_MEDIA_IMAGES": {}
  }
}

在代码中请求权限:

uni.authorize({
  scope: 'scope.writePhotosAlbum',
  success: function () {
    console.log('授权成功');
    // 授权成功后调用 uni.chooseImage
    uni.chooseImage({
      count: 1,
      success: function (res) {
        console.log('选择图片成功', res.tempFilePaths);
      },
      fail: function (err) {
        console.log('选择图片失败', err);
      }
    });
  },
  fail: function (err) {
    console.log('授权失败', err);
  }
});

2. 权限请求流程问题

Android 13 的权限请求流程可能与之前的版本有所不同。确保在调用 uni.chooseImage 之前,已经成功获取了所需的权限。

3. 权限未正确处理

在 Android 13 及以上版本,用户可能会选择授予部分权限(例如,只允许访问部分图片),或者在某些情况下,权限请求可能被拒绝。你需要在代码中处理这些情况,并确保在权限被拒绝后,能够引导用户手动授予权限。

4. 检查应用的目标 SDK 版本

确保你的应用的目标 SDK 版本设置为 33 或更高,以确保 Android 13 的新权限机制被正确应用。

5. 使用 uni.getSetting 检查权限状态

在调用 uni.chooseImage 之前,可以使用 uni.getSetting 检查当前的权限状态,确保权限已经授予。

uni.getSetting({
  success: function (res) {
    if (res.authSetting['scope.writePhotosAlbum']) {
      // 已经授权,可以调用 uni.chooseImage
      uni.chooseImage({
        count: 1,
        success: function (res) {
          console.log('选择图片成功', res.tempFilePaths);
        },
        fail: function (err) {
          console.log('选择图片失败', err);
        }
      });
    } else {
      // 未授权,请求权限
      uni.authorize({
        scope: 'scope.writePhotosAlbum',
        success: function () {
          console.log('授权成功');
          // 授权成功后调用 uni.chooseImage
          uni.chooseImage({
            count: 1,
            success: function (res) {
              console.log('选择图片成功', res.tempFilePaths);
            },
            fail: function (err) {
              console.log('选择图片失败', err);
            }
          });
        },
        fail: function (err) {
          console.log('授权失败', err);
        }
      });
    }
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!