uni-app uni.scanCode 拒绝后重新进入又被拉起权限询问(不应该拉起),再拒绝一次后重新进入就不会被拉起了
uni-app uni.scanCode 拒绝后重新进入又被拉起权限询问(不应该拉起),再拒绝一次后重新进入就不会被拉起了
示例代码:
uni.scanCode({ success: async (res) => {} })
## 操作步骤:
直接扫码
## 预期结果:
第一次拒绝后,再次进入就不要弹出 权限询问
## 实际结果:
连续拒绝两次才不会弹出
## bug描述:
问题:uni.scanCode 拒绝后重新进入 又被拉起了权限询问(不应该拉起),再拒绝一次后重新进入就不会被拉起
期望目标:只拒绝一次,不要重复2次
| 信息类型 | 详细信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | w10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.08 |
| 手机系统 | Android |
| 手机系统版本号 | Android 10 |
| 手机厂商 | 小米 |
| 手机机型 | Redmi 7 |
| 页面类型 | vue |
| vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app uni.scanCode 拒绝后重新进入又被拉起权限询问(不应该拉起),再拒绝一次后重新进入就不会被拉起了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
应该不是问题吧,我看了几个项目都这样,可以取消问题了
更多关于uni-app uni.scanCode 拒绝后重新进入又被拉起权限询问(不应该拉起),再拒绝一次后重新进入就不会被拉起了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中使用 uni.scanCode 进行扫码时,如果用户拒绝了权限请求,再次进入页面时系统可能会再次弹出权限请求对话框。这种行为通常是由于系统的权限管理机制导致的。为了优化用户体验,可以采取以下措施来避免重复弹出权限请求对话框。
1. 检查权限状态
在调用 uni.scanCode 之前,可以先检查用户是否已经授予了相关权限。如果用户已经拒绝了权限,可以提示用户手动开启权限,而不是直接调用 uni.scanCode 导致再次弹出权限请求对话框。
uni.getSetting({
success(res) {
if (!res.authSetting['scope.camera']) {
// 用户未授权相机权限
uni.showModal({
title: '提示',
content: '请开启相机权限以使用扫码功能',
success(res) {
if (res.confirm) {
// 用户点击确定,跳转到设置页面
uni.openSetting({
success(res) {
console.log(res.authSetting);
}
});
}
}
});
} else {
// 用户已授权,直接调用扫码功能
uni.scanCode({
success(res) {
console.log(res.result);
},
fail(err) {
console.error(err);
}
});
}
}
});
2. 记录用户的选择
可以记录用户是否已经拒绝了权限请求。如果用户已经拒绝了权限请求,再次进入页面时不再直接调用 uni.scanCode,而是提示用户手动开启权限。
let hasDeniedPermission = false; // 假设这是一个全局变量或存储在本地
if (hasDeniedPermission) {
uni.showModal({
title: '提示',
content: '请开启相机权限以使用扫码功能',
success(res) {
if (res.confirm) {
uni.openSetting({
success(res) {
console.log(res.authSetting);
}
});
}
}
});
} else {
uni.scanCode({
success(res) {
console.log(res.result);
},
fail(err) {
if (err.errMsg.includes('auth deny')) {
hasDeniedPermission = true; // 记录用户拒绝了权限
}
console.error(err);
}
});
}
3. 使用 uni.authorize
在调用 uni.scanCode 之前,可以先调用 uni.authorize 请求权限。如果用户拒绝了权限,可以提示用户手动开启权限。
uni.authorize({
scope: 'scope.camera',
success() {
// 用户已授权,直接调用扫码功能
uni.scanCode({
success(res) {
console.log(res.result);
},
fail(err) {
console.error(err);
}
});
},
fail(err) {
if (err.errMsg.includes('auth deny')) {
uni.showModal({
title: '提示',
content: '请开启相机权限以使用扫码功能',
success(res) {
if (res.confirm) {
uni.openSetting({
success(res) {
console.log(res.authSetting);
}
});
}
}
});
}
}
});

