Appearance
权限分类
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_STATE | WiFi 状态查询 |
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 权限 | 等级 |
|---|---|---|
| CAMERA | CAMERA | user_granted |
| MICROPHONE | RECORD_AUDIO | user_granted |
| LOCATION | ACCESS_FINE_LOCATION | user_granted |
| READ_MEDIA | READ_EXTERNAL_STORAGE | user_granted |
| INTERNET | INTERNET | normal |
| USE_BLUETOOTH | BLUETOOTH | normal |
面试提示:熟悉常用权限的名称、等级和使用场景是面试基础要求。