一、课程目标
本文章将系统讲解OpenHarmony应用权限管理的核心要点,帮助开发者:
1. 掌握system_grant
(系统授权)与user_grant
(用户授权)的区别与使用场景;
2. 学会应用权限的申请流程,包括配置文件声明与动态请求用户授权。
二、权限类型:system_grant vs user_grant
1. system_grant(系统授权)
- 特点:安装应用时由系统自动授予,无需用户手动操作。(只需要声明权限就可以)
- 适用场景:涉及基础功能且无需敏感数据的权限,如网络访问、设备信息读取等。
- 配置方式:在
module.json5
中声明权限。
2. user_grant(用户授权)
- 特点:需在应用运行时通过弹窗请求用户授权,用户同意后才生效。
- 适用场景:涉及用户隐私或敏感操作的权限,如摄像头、麦克风、位置等。
- 配置方式:在
module.json5
中声明权限,并通过代码动态请求
三、权限申请实操指南
1.明确需求
在openharmony找到我们需要权限的授权方式,权限级别下节我们再讲解
官网链接:OpenAtom OpenHarmony
2. 声明权限(配置文件)
在module.json5
中添加权限声明
官网链接:OpenAtom OpenHarmony
1. system_grant(系统授权)
比如说我们申请网络权限
"requestPermissions": [{
"name": "ohos.permission.INTERNET"
}],
2. user_grant(用户授权)
"requestPermissions": [
{
"name": "ohos.permission.MICROPHONE",
"reason": "$string:module_desc",
"usedScene": {
"abilities": [
"UIAbility"
],
"when": "inuse"
}
}
],
ctr加左键可以配置申请权限的原因
假如我这里改成hello world
那后面拉起授权弹窗时:
3. 动态请求用户授权(user_grant)
在代码中调用API拉起授权弹窗:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
const context = getContext(this) as common.UIAbilityContext
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
async aboutToAppear(): Promise<void> {
await this.requestMicrophone()
}
async requestMicrophone(){
const permissions:Array<Permissions> = ['ohos.permission.MICROPHONE']
const atManger = abilityAccessCtrl.createAtManager()
const requestResult =await atManger.requestPermissionsFromUser(
context,
permissions
)
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
3. 二次请求授权(后面再讲)
- 若用户首次拒绝授权,应用无法再次直接弹窗请求。
- 需调用
requestPermissionOnSetting()
,跳转系统设置界面引导用户手动授权。
五、常见问题与注意事项
- 权限滥用风险
-
- 仅申请必要权限,避免过度索取。
system_core
权限需谨慎使用,需通过系统签名校验。
- 上架审核要求
-
usedScene
字段需清晰描述权限使用场景,否则应用可能被驳回。
- 兼容性
-
- 不同OpenHarmony版本权限机制可能略有差异,建议参考官方文档适配。
六、总结
通过本文,您已掌握:
- 权限类型:系统授权与用户授权的核心区别;
- 完整流程:从声明权限到动态请求用户授权的代码实现。
下一步建议:结合实际项目需求,合理规划权限申请策略,并遵循最小化权限原则,保障用户隐私与系统安全。
相关资源
欢迎在评论区交流探讨! 🚀