中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
本文原创发布在华为开发者社区。
本示例基于abilityAccessCtrl实现了应用获取相机权限,位置信息以及步数信息三种常见权限的功能,每个权限都需要向用户申请,用户确认后才可开启。
应用获取不同权限源码链接
调用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; }
微信扫码分享