uni-app uni.getAppAuthorizeSetting() 摄像头 定位权限 首次进入APP未获取相关权限时返回值都是‘denied’

发布于 1周前 作者 bupafengyu 来自 Uni-App

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权限,

  1. 首次进入APP未获取相关权限时返回值都是‘denied’, 至少安卓14,15,10是这样
  2. 动态申请权限后拒绝授权再次打开APP不是返回‘config error’而是‘denied’

开发环境信息

项目 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win11专业版
HBuilderX类型 正式
HBuilderX版本号 4.29
手机系统 Android
手机系统版本号 Android 14
手机厂商 华为
手机机型 安卓14,15
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

3 回复

我也遇到了,问题解决了吗


解决办法就是别用这个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方法。

回到顶部