js-apis-permissionrequestresult.md 3.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# PermissionRequestResult

权限请求结果对象,在调用[requestPermissionsFromUser](js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)申请权限时返回此对象表明此次权限申请的结果。

> **说明:**
> 
> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。  
> 本模块接口仅可在Stage模型下使用。

## 属性

**系统能力**:以下各项对应的系统能力均为SystemCapability.Security.AccessToken

| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| permissions | Array<string> | 是 | 否 | 用户传入的权限。|
Z
zhouyan 已提交
17
| authResults | Array&lt;number&gt; | 是 | 否 | 相应请求权限的结果:<br>- -1:未授权,表示权限已设置,无需弹窗,需要用户在"设置"中修改。<br>- 0:已授权。<br>- 2:未授权,表示请求无效,可能原因有:<br>  -未在设置文件中声明目标权限。<br>  -权限名非法。<br>  -部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件,见[ohos.permission.LOCATION](../../security/permission-list.md#ohospermissionlocation)[ohos.permission.APPROXIMATELY_LOCATION](../../security/permission-list.md#ohospermissionapproximately_location) |
18 19 20 21 22 23

## 使用说明

通过atManager实例来获取。

**示例:**
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

ArkTS语法不支持直接使用globalThis,需要通过一个单例的map来做中转。开发者需要:

a. 在EntryAbility.ets中导入构建的单例对象GlobalThis。
  ```typescript
    import { GlobalThis } from '../utils/globalThis'; // 需要根据globalThis.ets的路径自行适配
  ```
b. 在onCreate中添加:
  ```typescript
    GlobalThis.getInstance().setContext('context', this.context);
  ```

> **说明:**
>
> 由于在ts中引入ets文件会有告警提示,需要将EntryAbility.ts的文件后缀修改为EntryAbility.ets,并在module.json5中同步修改。

**globalThis.ets示例代码如下:**
```typescript
import common from '@ohos.app.ability.common';

// 构造单例对象
export class GlobalThis {
  private constructor() {}
  private static instance: GlobalThis;
  private _uiContexts = new Map<string, common.UIAbilityContext>();

  public static getInstance(): GlobalThis {
    if (!GlobalThis.instance) {
      GlobalThis.instance = new GlobalThis();
    }
    return GlobalThis.instance;
  }

  getContext(key: string): common.UIAbilityContext | undefined {
    return this._uiContexts.get(key);
  }

  setContext(key: string, value: common.UIAbilityContext): void {
    this._uiContexts.set(key, value);
  }

  // 其他需要传递的内容依此扩展
}
```

69
```ts
70
import { BusinessError } from '@ohos.base';
71
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
72 73 74
import common from '@ohos.app.ability.common';
import { GlobalThis } from '../utils/globalThis';

75 76
let atManager = abilityAccessCtrl.createAtManager();
try {
77 78
  let context: common.UIAbilityContext = GlobalThis.getInstance().getContext('context');
  atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"]).then((data) => {
79 80 81
      console.info("data:" + JSON.stringify(data));
      console.info("data permissions:" + data.permissions);
      console.info("data authResults:" + data.authResults);
82
  }).catch((err: BusinessError) => {
83 84 85 86 87 88
      console.info("data:" + JSON.stringify(err));
  })
} catch(err) {
  console.log(`catch err->${JSON.stringify(err)}`);
}
```