Skip to content

权限分类

HarmonyOS NEXT 的权限按功能和风险等级进行详细分类。


1. 权限分类总览

HarmonyOS 权限按功能领域分为以下类别:

类别权限前缀说明
系统基础ohos.permission.*通用系统权限
设备管理ohos.permission.MANAGE_*设备控制权限
媒体ohos.permission.MEDIA_*音视频相关
位置ohos.permission.LOCATION*定位相关
通信ohos.permission.CALL* / SMS*通话短信
存储ohos.permission.READ/WRITE_*文件访问
传感器ohos.permission.SENSOR*传感器数据
网络ohos.permission.INTERNET网络访问

2. 常用权限详解

2.1 网络权限

json5
{
  "name": "ohos.permission.INTERNET",
  "reason": "$string:internet_reason"
}
// 等级:normal
// 用途:访问互联网
// 授权:安装时自动授予

2.2 相机权限

json5
{
  "name": "ohos.permission.CAMERA",
  "reason": "$string:camera_reason",
  "usedScene": {
    "abilities": ["EntryAbility"],
    "when": "inuse"
  }
}
// 等级:user_granted
// 用途:拍照、录像、预览
// 授权:运行时动态申请

2.3 位置权限

json5
{
  "name": "ohos.permission.LOCATION",
  "reason": "$string:location_reason",
  "usedScene": {
    "abilities": ["EntryAbility"],
    "when": "always"  // "inuse"
  }
}
// 等级:user_granted
// 用途:GPS 定位、基站定位
// 授权:运行时动态申请

2.4 麦克风权限

json5
{
  "name": "ohos.permission.MICROPHONE",
  "reason": "$string:microphone_reason",
  "usedScene": {
    "abilities": ["EntryAbility"],
    "when": "inuse"
  }
}
// 等级:user_granted
// 用途:录音、语音识别
// 授权:运行时动态申请

2.5 存储权限

json5
// 读取媒体文件
{
  "name": "ohos.permission.READ_MEDIA",
  "reason": "$string:read_media_reason"
}

// 写入媒体文件
{
  "name": "ohos.permission.WRITE_MEDIA",
  "reason": "$string:write_media_reason"
}
// 等级:user_granted
// 用途:访问相册、文件
// 授权:运行时动态申请

2.6 蓝牙权限

json5
{
  "name": "ohos.permission.USE_BLUETOOTH",
  "reason": "$string:bluetooth_reason"
}
// 等级:normal
// 用途:蓝牙连接、数据传输
// 授权:安装时自动授予

2.7 通知权限

json5
{
  "name": "ohos.permission.NOTIFICATION_CONTROLLER",
  "reason": "$string:notification_reason"
}
// 等级:user_granted
// 用途:读取/发送通知
// 授权:运行时动态申请

3. 敏感权限列表

需要运行时申请的权限(user_granted)

权限名称用途风险等级
CAMERA相机拍照
MICROPHONE录音
LOCATION定位
READ_CONTACTS读取联系人
WRITE_CONTACTS修改联系人
READ_CALL_LOG读取通话记录
READ_MEDIA读取媒体文件
WRITE_MEDIA写入媒体文件
NOTIFICATION_CONTROLLER通知控制

自动授予的权限(normal)

权限名称用途
INTERNET网络访问
USE_BLUETOOTH蓝牙使用
ACCESS_NETWORK_STATE网络状态查询
GET_WIFI_STATEWiFi 状态查询
VIBRATE振动控制

4. 权限使用场景配置

usedScene 配置

json5
{
  "name": "ohos.permission.CAMERA",
  "reason": "$string:camera_reason",
  "usedScene": {
    "abilities": ["EntryAbility", "CameraAbility"],
    "when": "inuse"  // 使用时申请
  }
}

when 参数说明

说明
inuse应用使用时申请(推荐)
always始终可申请(后台也可用)
foreground仅前台可用

5. 权限分组(逻辑分组)

虽然鸿蒙没有 Android 那样的权限组概念,但开发时应逻辑分组:

typescript
// 相机相关权限组
const CAMERA_PERMISSIONS = [
  'ohos.permission.CAMERA',
  'ohos.permission.READ_MEDIA',
  'ohos.permission.WRITE_MEDIA'
];

// 位置相关权限组
const LOCATION_PERMISSIONS = [
  'ohos.permission.LOCATION',
  'ohos.permission.ACCESS_NETWORK_STATE'
];

// 批量检查
async function checkPermissions(permissions: string[]): Promise<boolean> {
  for (let perm of permissions) {
    let result = await accessControl.verifyAccessToken({
      permissionName: perm,
      tokenId: tokenId
    });
    if (result !== 0) return false;
  }
  return true;
}

6. 面试高频问题

Q1: 哪些权限需要运行时申请?

:涉及用户隐私和敏感数据的权限需要运行时申请,如:相机、麦克风、位置、联系人、存储等。

Q2: usedScene 的作用是什么?

usedScene 定义权限的使用场景,包括:

  • abilities:哪些 Ability 可以使用此权限
  • when:何时可以申请(inuse/always/foreground)

Q3: 如何区分 normal 和 user_granted 权限?

  • normal:低风险,安装时自动授予,如网络、蓝牙
  • user_granted:高风险,需用户明确授权,如相机、位置

7. 与 Android 对照

鸿蒙权限Android 权限等级
CAMERACAMERAuser_granted
MICROPHONERECORD_AUDIOuser_granted
LOCATIONACCESS_FINE_LOCATIONuser_granted
READ_MEDIAREAD_EXTERNAL_STORAGEuser_granted
INTERNETINTERNETnormal
USE_BLUETOOTHBLUETOOTHnormal

面试提示:熟悉常用权限的名称、等级和使用场景是面试基础要求。