HarmonyOS 申请定位权限失败问题

代码中通过abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, [‘ohos.permission.LOCATION’])尝试动态申请定位权限,但PermissionRequestResult.authResults中返回的值是2,看abilityAccessCtrl.GrantStatus中定义的值只有-1和0,那么2是什么情况?

HarmonyOS
2024-12-27 16:31:22
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

精确定位不可以单独申请,要先申请模糊定位权限后再去申请精确定位权限,而且对于精确单位申请的时候,必须和模糊定位权限一起申请

// 定位能力所需要的权限

private permissions: Array<Permissions> = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];

class PermissionsUtil {

  /**
   * 校验应用是否被授予定位权限
   * @param permissions
   * @returns
   */
  async checkPermissions(permissions: Array<Permissions>): Promise<void> {
    let applyResult: boolean = false;
    for (let permission of permissions) {
      let grantStatus: abilityAccessCtrl.GrantStatus = await this.checkAccessToken(permission);
      if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
        applyResult = true;
      } else {
        applyResult = false;
      }
    }
    if (!applyResult) {
      this.requestPermissions(permissions);
    }
  }

  async checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;

    // 获取应用程序的accessTokenID
    let tokenId: number = 0;
    try {
      let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
      let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
      tokenId = appInfo.accessTokenId;
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
    }

    // 校验应用是否被授予权限
    try {
      grantStatus = await atManager.checkAccessToken(tokenId, permission);
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);
    }

    return grantStatus;
  }

  /**
   * 申请用户授权
   * @param permissions
   */
  requestPermissions(permissions: Array<Permissions>): void {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(getContext() as common.UIAbilityContext, permissions)
      .then((data: PermissionRequestResult) => {
        console.info('request Permissions success')
      })
      .catch((err: BusinessError) => {
        console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
      })
  }
}

export default new PermissionsUtil();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
分享
微博
QQ
微信
回复
2024-12-27 19:00:41


相关问题
HarmonyOS 新增申请权限编译失败
426浏览 • 1回复 待解决
HarmonyOS SaveButton 申请临时权限失败
980浏览 • 1回复 待解决
HarmonyOS定位权限问题
1018浏览 • 1回复 待解决
HarmonyOS 定位功能定位失败问题
951浏览 • 1回复 待解决
HarmonyOS权限申请问题
917浏览 • 1回复 待解决
HarmonyOS 获取定位失败问题
597浏览 • 1回复 待解决
HarmonyOS 权限申请拒绝问题
668浏览 • 1回复 待解决
HarmonyOS申请用户位置权限问题
1015浏览 • 1回复 待解决
HarmonyOS 相册权限检查、申请问题
1743浏览 • 1回复 待解决
HarmonyOS 推送分类申请失败问题咨询
809浏览 • 1回复 待解决
Web加载失败问题定位定界指导
465浏览 • 1回复 待解决
HarmonyOS 动态申请权限申请不了
527浏览 • 1回复 待解决
HarmonyOS 位置权限申请
603浏览 • 1回复 待解决
HarmonyOS 内网环境定位失败
550浏览 • 1回复 待解决