鸿蒙 ArkUI 权限配置说明

发布于:2025-03-28 ⋅ 阅读:(39) ⋅ 点赞:(0)

在鸿蒙应用开发中,应用程序需要申请适当的权限以访问设备的各种功能,如网络、文件、位置信息、相机等。本文将介绍 ArkUI 相关的权限配置方式及常见权限的使用方法。

1. 权限配置方式

鸿蒙系统的权限分为 普通权限敏感权限

  • 普通权限:应用无需用户确认即可使用,如网络访问。
  • 敏感权限:需要用户授权才能使用,如读取联系人、访问摄像头。

config.jsonmodule.reqPermissions 中进行权限声明,例如:

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "ohos.permission.LOCATION",
        "reason": "应用需要获取位置信息"
      }
    ]
  }
}

2. 常见权限说明及配置

2.1 网络权限

用于访问互联网或本地网络。

{
  "name": "ohos.permission.INTERNET"
}

2.2 存储权限

用于访问设备存储。

{
  "name": "ohos.permission.READ_MEDIA"
}
{
  "name": "ohos.permission.WRITE_MEDIA"
}

2.3 位置权限

用于获取设备位置信息。

{
  "name": "ohos.permission.LOCATION"
}

2.4 摄像头权限

用于访问摄像头。

{
  "name": "ohos.permission.CAMERA"
}

2.5 录音权限

用于访问麦克风录音。

{
  "name": "ohos.permission.RECORD_AUDIO"
}

3. 代码动态请求权限

部分权限需要动态申请,可以使用 @ohos.abilityAccessCtrl 进行权限检查和请求。

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

async function requestPermission(permission: string) {
  let context = getContext(this);
  let atManager = abilityAccessCtrl.createAtManager();
  let grantStatus = await atManager.requestPermissionsFromUser(context, [permission]);
  if (grantStatus[0] === 0) {
    console.info(`${permission} 授权成功`);
  } else {
    console.warn(`${permission} 授权失败`);
  }
}

4. 运行时权限处理

在应用 aboutToAppear 阶段检查权限,并在 UI 中提示用户。

@Entry
@Component
struct PermissionDemo {
  @State hasLocationPermission: boolean = false;

  aboutToAppear() {
    this.checkPermission();
  }

  async checkPermission() {
    let context = getContext(this);
    let atManager = abilityAccessCtrl.createAtManager();
    let result = await atManager.checkPermission(context, "ohos.permission.LOCATION");
    this.hasLocationPermission = result === 0;
  }

  async requestLocation() {
    await requestPermission("ohos.permission.LOCATION");
    this.checkPermission();
  }

  build() {
    Column() {
      Text(this.hasLocationPermission ? "已授权位置信息" : "未授权位置信息")
      Button("申请权限").onClick(() => this.requestLocation());
    }
  }
}

5. 总结

  • 鸿蒙权限需要在 config.json 中声明。
  • 敏感权限需要动态请求。
  • 可以使用 abilityAccessCtrl 检查和申请权限。
  • 确保在 UI 组件中合理处理权限授权流程。