文档管理中心
FAQ应用框架开发程序框架程序框架(Ability)如何判断权限状态是首次申请还是用户已拒绝

如何判断权限状态是首次申请还是用户已拒绝

问题现象

通过atManager.checkAccessTokenSync获取权限的授权状态时,只有PERMISSION_DENIED(未授权)和PERMISSION_GRANTED(已授权)两种状态,怎么判断当前权限是否为首次申请?

效果预览

背景知识

解决方案

可用atManager.requestPermissionsFromUser拉起弹框请求用户授权,返回类型为:PermissionRequestResult,如果dialogShownResults为true,则代表为首次弹窗请求授权。

以申请ohos.permission.CAMERA为例:

收起
自动换行
深色代码主题
复制
  1. export function checkPermission(context: Context) {
  2. const PERMISSION_ARRAY: Permissions[] = ['ohos.permission.CAMERA'];
  3. const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  4. atManager.requestPermissionsFromUser(context, PERMISSION_ARRAY).then((data) => {
  5. if (data.authResults[0] === 0) {
  6. // 已授权
  7. console.info('request permission success.')
  8. return;
  9. }
  10. if (data.dialogShownResults && data.dialogShownResults.length > 0 && data.dialogShownResults[0]) {
  11. // 首次权限申请
  12. console.info('request permission first.')
  13. } else {
  14. // 如果是未授权状态,可通过requestPermissionOnSetting拉起系统设置半模态二次授权
  15. atManager.requestPermissionOnSetting(context, PERMISSION_ARRAY)
  16. .then((data: Array<abilityAccessCtrl.GrantStatus>) => {
  17. console.info('data:' + JSON.stringify(data));
  18. })
  19. .catch((err: BusinessError) => {
  20. console.error('data:' + JSON.stringify(err));
  21. });
  22. }
  23. })
  24. }
在 FAQ 中进行搜索
请输入您想要搜索的关键词