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

#### 问题现象

通过atManager.checkAccessTokenSync获取权限的授权状态时，只有PERMISSION\_DENIED（未授权）和PERMISSION\_GRANTED（已授权）两种状态，怎么判断当前权限是否为首次申请？

#### 效果预览

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e7/v3/gw4ZspjZQEqL_bPklL8eGQ/zh-cn_image_0000002658868617.png?HW-CC-KV=V1&HW-CC-Date=20260709T133822Z&HW-CC-Expire=86400&HW-CC-Sign=EC67196C51A21B898CEEF0E679C9290724CF136B011D110AE618291C0E536C6D "点击放大")

#### 背景知识

*   [abilityAccessCtrl.createAtManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-abilityaccessctrl#abilityaccessctrlcreateatmanager)：获取访问控制模块对象，访问控制管理。
*   [atManager.requestPermissionsFromUser](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-abilityaccessctrl#requestpermissionsfromuser9)：用于UIAbility/UIExtensionAbility拉起弹框请求用户授权。

#### 解决方案

可用atManager.requestPermissionsFromUser拉起弹框请求用户授权，返回类型为：[PermissionRequestResult](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-permissionrequestresult)，如果dialogShownResults为true，则代表为首次弹窗请求授权。

以申请ohos.permission.CAMERA为例：

export function checkPermission(context: Context) {
  const PERMISSION\_ARRAY: Permissions\[\] \= \['ohos.permission.CAMERA'\];
  const atManager: abilityAccessCtrl.AtManager \= abilityAccessCtrl.createAtManager();
  atManager.requestPermissionsFromUser(context, PERMISSION\_ARRAY).then((data) \=\> {
    if (data.authResults\[0\] \=== 0) {
      _//_ _已授权_
      console.info('request permission success.')
      return;
    }
    if (data.dialogShownResults && data.dialogShownResults.length \> 0 && data.dialogShownResults\[0\]) {
      _// 首次权限申请_
      console.info('request permission first.')
    } else {
     _ // 如果是未授权状态，可通过requestPermissionOnSetting拉起系统设置半模态二次授权_
      atManager.requestPermissionOnSetting(context, PERMISSION\_ARRAY)
        .then((data: Array<abilityAccessCtrl.GrantStatus\>) \=\> {
          console.info('data:' \+ JSON.stringify(data));
        })
        .catch((err: BusinessError) \=\> {
          console.error('data:' \+ JSON.stringify(err));
        });
    }
  })
}