uni-app uni.chooseImage 权限bug 点了允许相册权限 实际上却是禁止了相册权限

uni-app uni.chooseImage 权限bug 点了允许相册权限 实际上却是禁止了相册权限

开发环境 版本号 项目创建方式
Mac 15.5 HBuilderX
# 操作步骤:
uni.chooseImage

# 预期结果:
正确权限

# 实际结果:
错误权限

# bug描述:
uni.chooseImage 选择照片,首次会弹访问相册权限的弹窗,点了允许,但实际上变成了禁止。然后,控制台会报:
已获取的权限:android.permission.READ_MEDIA_IMAGES at uni_modules/x-perm-apply-instr/js_sdk/permission.js
Unhandled promise rejectionTypeError: Cannot read property '0' of undefined
在红米K80,vivo手机上,都是一样的情况。

更多关于uni-app uni.chooseImage 权限bug 点了允许相册权限 实际上却是禁止了相册权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.chooseImage 权限bug 点了允许相册权限 实际上却是禁止了相册权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的Android权限适配问题。在Android 13及以上版本中,图片权限从READ_EXTERNAL_STORAGE变更为READ_MEDIA_IMAGES,而部分设备厂商在权限处理上存在差异。

问题分析:

  1. 权限弹窗显示与实际授权结果不一致,说明系统权限回调处理异常
  2. Cannot read property '0' of undefined错误表明权限请求返回的数据结构不符合预期
  3. 红米、vivo等设备出现相同问题,说明这是Android新权限机制的兼容性问题

解决方案:

  1. 检查manifest.json中是否配置了新的权限声明:
{
  "permissions": {
    "android": [
      "android.permission.READ_MEDIA_IMAGES"
    ]
  }
}
  1. 使用x-permission模块进行权限检查和处理:
// 在调用chooseImage前先检查权限
const permission = uni.requireNativePlugin('x-permission')
permission.requestPermissions(['android.permission.READ_MEDIA_IMAGES'], (result) => {
  if (result.code === 0) {
    uni.chooseImage({
      count: 1,
      success: (res) => {
        console.log(res.tempFilePaths)
      }
    })
  }
})
回到顶部