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();
分享
微博
QQ
微信
回复
2024-12-27 19:00:41
相关问题
HarmonyOS 新增申请权限编译失败
309浏览 • 1回复 待解决
HarmonyOS SaveButton 申请临时权限失败
841浏览 • 1回复 待解决
HarmonyOS定位权限问题
957浏览 • 1回复 待解决
HarmonyOS 定位功能定位失败问题
738浏览 • 1回复 待解决
HarmonyOS 获取定位失败问题
495浏览 • 1回复 待解决
HarmonyOS 权限申请拒绝问题
529浏览 • 1回复 待解决
HarmonyOS权限申请问题
812浏览 • 1回复 待解决
HarmonyOS 相册权限检查、申请问题
1643浏览 • 1回复 待解决
HarmonyOS申请用户位置权限问题
894浏览 • 1回复 待解决
HarmonyOS 推送分类申请失败问题咨询
773浏览 • 1回复 待解决
Web加载失败问题定位定界指导
399浏览 • 1回复 待解决
HarmonyOS 动态申请权限申请不了
396浏览 • 1回复 待解决
HarmonyOS 位置权限申请
485浏览 • 1回复 待解决
HarmonyOS 内网环境定位失败
463浏览 • 1回复 待解决
startAbility调用失败如何定位
1190浏览 • 1回复 待解决