uni-app uni.chooseImage拍照获取权限时 小米手机拒绝后重复弹窗
uni-app uni.chooseImage拍照获取权限时 小米手机拒绝后重复弹窗
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | - | HBuilderX |
Android | Android 11 | - |
HBuilderX | 3.4.7 | - |
Vue | vue2 | - |
示例代码:
uploadImg() {
let that = this;
uni.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: res => {
uni.showLoading({
title: '正在上传...',
icon: 'loading',
});
// 上传完成后把文件上传到服务器
that.getURl(res.tempFilePaths[0])
},
fail: function(err) {
console.log(err.errMsg);
}
})
}
操作步骤:
触发相机权限必现
预期结果:
wu
实际结果:
wu
bug描述:
uni.chooseImage,拍照获取权限,小米手机拒绝后重复弹窗
更多关于uni-app uni.chooseImage拍照获取权限时 小米手机拒绝后重复弹窗的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前的设计是权限拒绝两次后将不再申请。应用下次启动会重新记数。
更多关于uni-app uni.chooseImage拍照获取权限时 小米手机拒绝后重复弹窗的实战教程也可以访问 https://www.itying.com/category-93-b0.html
回复 l***@126.com: 这要需要你自行确认下代码行为。看是是不是重复调用相机功能了。功能模块本身不存在自动重复申请权限的。
回复 l***@126.com: 荣耀是拒绝一次后第二次就不弹了 哈哈哈哈
请问你解决了?拒绝后还会弹一次提醒
什么拒绝
应该不是代码问题,华为手机测试没有问题。小米,调用uni.chooseImage后,第一次拒绝 ,就会弹出第二次,一样的授权说明,就和楼主截图一样,出现两次。
您好,请问这个该如何解决 因为这个上架不了
请问你解决了?
在使用 uni.chooseImage
API 进行拍照时,如果在小米手机(或其他安卓设备)上用户拒绝了权限请求,可能会遇到权限弹窗重复出现的问题。这是因为安卓系统(特别是 MIUI)在处理权限请求时的一些特殊行为。
解决方案
以下是一些可能的解决方案,你可以根据实际情况选择最适合的:
1. 检查权限状态
在调用 uni.chooseImage
之前,先检查相机权限是否已经被授予。如果用户已经拒绝了权限,可以引导用户手动去设置中开启权限,而不是重复弹窗。
uni.getSetting({
success(res) {
if (!res.authSetting['scope.camera']) {
uni.authorize({
scope: 'scope.camera',
success() {
// 用户已经同意授权,可以调用 uni.chooseImage
uni.chooseImage({
count: 1,
sourceType: ['camera'],
success(res) {
console.log(res.tempFilePaths);
}
});
},
fail() {
// 用户拒绝了授权,提示用户去设置中手动开启权限
uni.showModal({
title: '提示',
content: '需要相机权限才能拍照,是否去设置中开启?',
success(res) {
if (res.confirm) {
uni.openSetting();
}
}
});
}
});
} else {
// 用户已经授权,直接调用 uni.chooseImage
uni.chooseImage({
count: 1,
sourceType: ['camera'],
success(res) {
console.log(res.tempFilePaths);
}
});
}
}
});
2. 处理用户拒绝后的逻辑
如果用户拒绝了权限请求,可以在 fail
回调中处理相应的逻辑,避免重复弹窗。例如,提示用户去设置中手动开启权限,或者直接结束操作。
uni.chooseImage({
count: 1,
sourceType: ['camera'],
success(res) {
console.log(res.tempFilePaths);
},
fail(err) {
if (err.errMsg.includes('auth deny')) {
uni.showModal({
title: '提示',
content: '需要相机权限才能拍照,是否去设置中开启?',
success(res) {
if (res.confirm) {
uni.openSetting();
}
}
});
}
}
});
3. 使用 uni.showActionSheet
引导用户选择
在调用 uni.chooseImage
之前,可以使用 uni.showActionSheet
让用户选择是从相册选择图片还是拍照。如果用户选择拍照,再检查相机权限。
uni.showActionSheet({
itemList: ['从相册选择', '拍照'],
success(res) {
if (res.tapIndex === 0) {
// 从相册选择
uni.chooseImage({
count: 1,
sourceType: ['album'],
success(res) {
console.log(res.tempFilePaths);
}
});
} else if (res.tapIndex === 1) {
// 拍照
uni.getSetting({
success(res) {
if (!res.authSetting['scope.camera']) {
uni.authorize({
scope: 'scope.camera',
success() {
uni.chooseImage({
count: 1,
sourceType: ['camera'],
success(res) {
console.log(res.tempFilePaths);
}
});
},
fail() {
uni.showModal({
title: '提示',
content: '需要相机权限才能拍照,是否去设置中开启?',
success(res) {
if (res.confirm) {
uni.openSetting();
}
}
});
}
});
} else {
uni.chooseImage({
count: 1,
sourceType: ['camera'],
success(res) {
console.log(res.tempFilePaths);
}
});
}
}
});
}
}
});