uni-app uni.chooseImage选择视频弹窗申请权限拒绝后会立即自动再一次弹出
uni-app uni.chooseImage选择视频弹窗申请权限拒绝后会立即自动再一次弹出
示例代码:
uni.chooseImage
## 操作步骤:
安装app后第一次调用uni.chooseImage,选择拍摄选项,弹出申请权限
预期结果:
拒绝一次后就不再弹出,直到下一次申请
## 实际结果:
弹出第一次权限申请拒绝后,没有任何操作,立马又弹出第二次申请
bug描述:
安装应用后初次调用uni.chooseImage申请相机权限时,拒绝后会立马再次申请
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC系统版本 | win10 专业版21H2 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.96 |
手机系统 | Android |
手机系统版本 | Android 13 |
手机厂商 | vivo |
手机机型 | iqoo8 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
只会弹出一次,你看看fail 回调是不是写逻辑了
<template>
<view class="content">
<button @click=“get”>获取图片</button>
</view>
</template>
没有写任何逻辑,就只是写了uni.chooseImage
var that = this
// #ifdef APP-PLUS
uni.chooseImage({
count: 1, //默认9
crop: {
quality: 100,//默认80
width: 160,//160px
height: 160,//160px
resize: true,//是否将width和height作为裁剪保存图片真实的像素值,默认true.注:设置为false时在裁剪编辑界面显示图片的像素值,设置为true时不显示
},
success: function (res) {
console.log(‘图片’,JSON.stringify(res.tempFilePaths));
console.log(‘图片地址’,res)
that.submitFiles(res.tempFilePaths[0])
}
});
// #endif
不只是弹两次授权的问题,谈两次授权都没有获取到权限后,再次点击拍摄没有任何反应
我这里暂时这个问题,我都忘记怎么解决了
发现这个问题了 怎么解决的
在 uni-app
中使用 uni.chooseImage
方法时,如果用户拒绝了权限申请,系统可能会再次弹出权限请求弹窗。这种行为通常是由于系统或框架的设计,以确保用户能够明确地授予或拒绝权限。
为了避免这种情况,你可以在代码中处理用户拒绝权限的情况,并采取相应的措施。以下是一个示例代码,展示了如何在用户拒绝权限后不再自动弹出权限请求弹窗:
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: function (res) {
console.log('选择成功', res.tempFilePaths);
},
fail: function (err) {
console.log('选择失败', err);
if (err.errMsg === 'chooseImage:fail auth deny') {
// 用户拒绝了权限
uni.showToast({
title: '您拒绝了权限,无法选择图片',
icon: 'none'
});
}
}
});
解释:
success
回调:当用户成功选择图片或视频时触发。fail
回调:当用户拒绝权限或选择失败时触发。err.errMsg === 'chooseImage:fail auth deny'
:检查错误信息是否为权限被拒绝的情况。uni.showToast
:显示提示信息,告知用户权限被拒绝。
进一步处理:
如果你希望在用户拒绝权限后,引导用户手动开启权限,可以使用 uni.openSetting
方法打开系统设置页面,让用户手动开启权限:
uni.showModal({
title: '提示',
content: '您拒绝了权限,是否前往设置开启?',
success: function (res) {
if (res.confirm) {
uni.openSetting({
success: (res) => {
console.log('设置页面打开成功', res);
},
fail: (err) => {
console.log('设置页面打开失败', err);
}
});
}
}
});