1***@qq.com
1***@qq.com
  • 发布:2023-11-23 11:50
  • 更新:2023-12-22 15:13
  • 阅读:349

【已解决】uni.chooseImage在app端第一次使用时出现的重复触发授权申请的bug

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 11

HBuilderX类型: 正式

HBuilderX版本号: 3.96

手机系统: Android

手机系统版本号: Android 12

手机厂商: vivo

手机机型: Neo3

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

//从本地或相机获取图片
huoqutupian(index){
const _this = this
const sourceType = index === 0 ? ['camera'] : ['album']
uni.chooseImage({
count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: sourceType,
success: function(res) {
// TODO 真是上传照片
_this.setData({
imageSrc: res.tempFilePaths[0],
})
_this.loadImage();//图片加载
}
});
},

//确认是否已获取存储授权
cunchuShouquan(index){
var _this = this
plus.android.requestPermissions(['android.permission.READ_EXTERNAL_STORAGE'],
(e) => {
if (e.granted.length > 0) {//如果权限被允许
_this.huoqutupian(index)
}
})
},

操作步骤:

手机设置里将存储权限禁止之后,再次调用存储功能都会有这个bug

预期结果:

正常情况用户允许授权之后,调用uni.chooseImage功能打开存储时不会有第二次的弹窗申请授权

实际结果:

重复的申请授权弹窗

bug描述:

plus.android.requestPermissions(['android.permission.READ_EXTERNAL_STORAGE'],此功能申请系统存储权限后,在用户允许使用的情况下(此处我检查过,用户允许之后,手机设置里app的存储权限已经被改成允许使用了),再调用官方的uni.chooseImage打开相册时,会再次弹出申请存储权限的提示,并且不点允许的情况下,重新点击还是会弹出申请权限。
测试时我使用的是vivoNeo3手机,另外还有一部同事的中兴手机,安卓版本是9.0,中兴手机在第一次弹窗申请权限被允许之后,还会弹出第二次弹窗,但是会快速跳转到相册功能,然后返回之后再次点击打开相册时就不会弹出申请权限了

附:同种写法我运用在相机功能的调用上时没有这个问题,所以应该是个bug

2023-11-23 11:50 负责人:DCloud_App_Array 分享
已邀请:
违规昵称4396

违规昵称4396

我也发现这个问题了,选择视频就没问题

  • 违规昵称4396

    用这个 android.permission.WRITE_EXTERNAL_STORAGE权限就可以了。uni.chooseImage是读写权限,你那个是读权限,没有写入权限所以会二次授权

    2023-12-22 15:43

  • 1***@qq.com (作者)

    回复 违规昵称4396: 感谢!虽然你给的方案不对,但确实让我搞明白了。我之前只获取了读的权限,而你的方案只获取了写的权限,我测了一下,两个权限都调用的情况下,uni.chooselmage就没有再弹权限获取了,本来这样还是要弹两次的,但是后面突然发现plus.android.requestPermissions是可以同时调用多个权限请求的,所以最终有了这个写法:

    plus.android.requestPermissions(['android.permission.READ_EXTERNAL_STORAGE','android.permission.WRITE_EXTERNAL_STORAGE']

    改了之后拿自己手机和同事手机测了一下,都没有问题

    2024-01-15 15:13

跪求答案

跪求答案

哥们你解决了吗?

  • 1***@qq.com (作者)

    不行,前两天hbuilder刚更新3.98版本,但是打包后测试还是会弹两次

    2023-12-15 15:42

  • 违规昵称4396

    回复 1***@qq.com: 用这个 android.permission.WRITE_EXTERNAL_STORAGE权限就可以了。uni.chooseImage是读写权限,你那个是读权限,没有写入权限所以会二次授权

    2023-12-22 15:43

  • 1***@qq.com (作者)

    我上面写法的存储授权那一步改一下就行,多加一个楼上说的'android.permission.WRITE_EXTERNAL_STORAGE'

    plus.android.requestPermissions(['android.permission.READ_EXTERNAL_STORAGE','android.permission.WRITE_EXTERNAL_STORAGE']

    2024-01-15 15:15

要回复问题请先登录注册