HarmonyOS鸿蒙Next应用中如何动态申请权限?
HarmonyOS鸿蒙Next应用中如何动态申请权限?
在使用之前调用我封装的这个方法就行
如使用位置权限:
await permissionManager.requestPermissionsWithDialog(['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'])
注意,先在config.json中申请权限:

更多关于HarmonyOS鸿蒙Next应用中如何动态申请权限?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在config.json文件中声明所需要的权限。
- 配置声明:在 config.json 中预先声明所需权限。
- 权限检查:调用 verifySelfPermission 查询是否已获得权限,若已获得则无需申请。
- 申请判断:若未获得权限,调用 canRequestPermission 判断是否可动态申请(若被永久禁止则终止流程)。
- 发起申请:调用 requestPermissionFromUser 发起动态申请。
- 结果接收:在 Ability 类(而非 AbilitySlice)中重写 onRequestPermissionsFromUserResult 回调函数,处理授权结果。
注意:必须在 Ability 中接收回调,AbilitySlice 无法接收。
在HarmonyOS Next应用中动态申请权限使用abilityAccessCtrl
模块。首先在module.json5
中声明所需权限。代码示例:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
let atManager = abilityAccessCtrl.createAtManager();
try {
atManager.requestPermissionsFromUser(this.context, ['permission.INTERNET'])
.then((data) => {
console.log('权限申请结果:', data.authResults);
});
} catch (err) {
console.error('权限申请失败:', err.code);
}
注意:this.context
需替换为当前Ability的上下文对象。申请结果会在Promise回调中返回。
在HarmonyOS Next应用中动态申请权限的方法如下:
-
首先在
config.json
中声明需要使用的权限:"abilities": [ { "name": "MainAbility", "permissions": ["ohos.permission.CAMERA"] } ]
-
在代码中使用
requestPermissionsFromUser
方法动态申请权限:import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; let permissions: Array<string> = ['ohos.permission.CAMERA']; let atManager = abilityAccessCtrl.createAtManager(); atManager.requestPermissionsFromUser(this.context, permissions) .then((data) => { console.log('权限申请结果:' + JSON.stringify(data)); }) .catch((err) => { console.error('权限申请失败:' + JSON.stringify(err)); });
-
处理权限申请结果:
- 用户授权后会返回
grantResults
为0 - 用户拒绝会返回
grantResults
为-1
- 检查权限状态:
let atManager = abilityAccessCtrl.createAtManager(); let result = atManager.checkAccessToken('ohos.permission.CAMERA');
注意:需要在UIAbility
的onWindowStageCreate
或页面生命周期中调用权限申请方法。