本文原创发布在华为开发者社区。
介绍
本示例基于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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。