应用获取不同权限鸿蒙示例代码 原创

鸿蒙场景化示例代码技术工程师
发布于 2025-2-12 16:03
浏览
0收藏

本文原创发布在华为开发者社区

介绍

本示例基于abilityAccessCtrl实现了应用获取相机权限,位置信息以及步数信息三种常见权限的功能,每个权限都需要向用户申请,用户确认后才可开启。

应用获取不同权限源码链接

效果预览

应用获取不同权限鸿蒙示例代码-鸿蒙开发者社区

使用说明

  1. 点击“打开相机”按钮,跳转到获取相机权限页,点击开始预览,应用向用户申请相机权限。
  2. 点击“获取位置信息”按钮,应用向用户申请位置权限,用户同意后,位置信息会显示在页面上。
  3. 点击“获取步数信息”按钮,跳转到获取步数查看权限页。

实现思路

调用requestPermissionsFromUser方法拉起弹框请求用户授权,点击获取时获取权限,在实际业务场景获取权限还需再判断一次是否已经授权,防止用户撤销授权。
核心代码如下,源码参考RequestPermission.ets

 //获取权限弹框
  async requestPermissions(permission: Permissions[], context: Context): Promise<void> {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    let result: PermissionRequestResult = await atManager.requestPermissionsFromUser(context, permission);
    let grantStatus: Array<number> = result.authResults;
    let length: number = grantStatus.length;
    for (let i = 0; i < length; i++) {
      if (grantStatus[i] !== 0) {
        //授权失败
        return;
      }
    }
    // 授权成功
    return;
  }

  //检查权限是否存在
  async onRemoteMessageRequest(permissionName: Permissions): Promise<boolean> {
    let flag: boolean = true;
    let callerTokenId: number = rpc.IPCSkeleton.getCallingTokenId();
    hilog.info(0X0000, 'testTag', 'RpcServer: getCallingTokenId result: ' + callerTokenId);
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    try {
      let res: number = await atManager.checkAccessToken(callerTokenId, permissionName)
      flag = (res === -1 ? false : true);
    } catch (err) {
      hilog.info(0X0000, 'testTag', `catch err->${JSON.stringify(err)}`);
    }
    return flag;
  }
  • 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.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2025-2-28 14:47:17修改
收藏
回复
举报


回复
    相关推荐