uni-app uni.getAppAuthorizeSetting() 摄像头 定位权限 首次进入APP未获取相关权限时返回值都是‘denied’
uni-app uni.getAppAuthorizeSetting() 摄像头 定位权限 首次进入APP未获取相关权限时返回值都是‘denied’
示例代码
const appAuthorizeSetting = uni.getAppAuthorizeSetting();
if (appAuthorizeSetting.cameraAuthorized === 'denied') {
//首次打开APP即执行
}
if (appAuthorizeSetting.cameraAuthorized === 'config error') {
//拒绝授权后再次打开APP不执行
}
操作步骤
首次进入APP使用uni.getAppAuthorizeSetting()获取摄像头、定位权限时返回值都是‘denied’
预期结果
首次进入APP应当为尚未请求权限或者’config error’
实际结果
首次进入APP使用uni.getAppAuthorizeSetting()获取摄像头、定位权限时返回值都是‘denied’;动态申请权限后拒绝授权再次打开APP不是返回‘config error’而是‘denied’
bug描述
uni.getAppAuthorizeSetting(),获取摄像头cameraAuthorized、定位locationAuthorized权限,
- 首次进入APP未获取相关权限时返回值都是‘denied’, 至少安卓14,15,10是这样
- 动态申请权限后拒绝授权再次打开APP不是返回‘config error’而是‘denied’
开发环境信息
项目 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win11专业版 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | Android |
手机系统版本号 | Android 14 |
手机厂商 | 华为 |
手机机型 | 安卓14,15 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
我也遇到了,问题解决了吗
解决办法就是别用这个api…真需要权限判断用拦截器
在uni-app中,使用uni.getAppAuthorizeSetting()
方法可以获取用户的权限授权状态。根据问题描述,首次进入APP时,如果未获取到摄像头或定位权限,返回值都是denied
。这通常是因为用户尚未对这些权限进行授权操作,导致系统默认返回未授权状态。
为了处理这种情况,我们可以在用户首次进入APP时,主动请求这些权限,并根据用户的授权结果进行相应的处理。以下是一个示例代码,展示了如何请求摄像头和定位权限,并处理授权结果。
// 在App.vue的onLaunch方法中处理权限请求
export default {
onLaunch() {
// 请求摄像头权限
uni.authorize({
scope: 'scope.camera',
success: (res) => {
if (res.authResult === 'authorize') {
console.log('摄像头权限授权成功');
// 执行需要摄像头权限的操作
} else {
console.log('摄像头权限授权失败或未授权');
// 可以引导用户去设置页面手动授权
uni.showModal({
title: '提示',
content: '为了正常使用APP功能,请允许访问摄像头',
showCancel: false,
success: (modalRes) => {
if (modalRes.confirm) {
uni.openSetting({
success: (settingRes) => {
if (settingRes.authSetting['scope.camera']) {
console.log('用户已在设置中授权摄像头权限');
} else {
console.log('用户未在设置中授权摄像头权限');
}
}
});
}
}
});
}
}
});
// 请求定位权限
uni.authorize({
scope: 'scope.userLocation',
success: (res) => {
if (res.authResult === 'authorize') {
console.log('定位权限授权成功');
// 执行需要定位权限的操作
} else {
console.log('定位权限授权失败或未授权');
// 可以引导用户去设置页面手动授权
uni.showModal({
title: '提示',
content: '为了正常使用APP功能,请允许访问位置信息',
showCancel: false,
success: (modalRes) => {
if (modalRes.confirm) {
uni.openSetting({
success: (settingRes) => {
if (settingRes.authSetting['scope.userLocation']) {
console.log('用户已在设置中授权定位权限');
} else {
console.log('用户未在设置中授权定位权限');
}
}
});
}
}
});
}
}
});
}
};
在这个示例中,我们分别在onLaunch
方法中请求了摄像头和定位权限,并通过uni.authorize
的回调处理授权结果。如果用户未授权,我们会弹出一个模态框提示用户,并引导他们去设置页面手动授权。注意,在引导用户去设置页面时,使用了uni.openSetting
方法。