HarmonyOS 鸿蒙Next中如何配置应用的权限?
HarmonyOS 鸿蒙Next中如何配置应用的权限?
【背景知识】
应用在申请权限时,需要在项目的配置文件中逐个声明需要的权限,否则应用将无法获取授权,详情请参考声明权限。
当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权,详情请参考向用户申请授权。
【解决方案】
系统不鼓励频繁弹窗打扰用户,如果调用requestPermissionsFromUser()接口被用户拒绝授权,将无法再次拉起弹窗,此时可使用requestPermissionOnSetting()二次拉起权限弹窗,或者引导用户跳转到系统设置的权限页进行手动开启权限,具体操作如下:
1.权限检查:
申请相关权限前应使用checkAccessToken()检查是否有该权限,若无权限则进行如下操作。 使用requestPermissionsFromUser()接口请求相应的权限时,系统会拉起权限弹窗。示例代码如下:
import { abilityAccessCtrl, Context, PermissionRequestResult, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
if (err) {
console.error(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
} else {
console.info('data:' + JSON.stringify(data));
console.info('data permissions:' + data.permissions);
console.info('data authResults:' + data.authResults);
console.info('data dialogShownResults:' + data.dialogShownResults);
}
});
2.二次向用户申请授权:
用户已经拒绝过该权限则不会再次弹起,需要引导用户开启权限有以下两种方案。
- 方案一: 调用requestPermissionOnSetting()二次拉起权限设置弹窗,示例代码如下:
import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
atManager.requestPermissionOnSetting(context, ['ohos.permission.CAMERA']).then((data: Array<abilityAccessCtrl.GrantStatus>) => {
console.info('data:' + JSON.stringify(data));
}).catch((err: BusinessError) => {
console.error('data:' + JSON.stringify(err));
});
注:不鼓励频繁调用requestPermissionOnSetting()进行权限请求。
- 方案二: 可以引导用户点击跳转到对应应用的权限页面,让用户手动授权,示例代码如下:
import { common } from '@kit.AbilityKit';
@Entry
@ComponentV2
struct SelectCollection {
build() {
Column() {
Button('跳转到对应应用的通知权限页').onClick(() => {
let context = getContext(this) as common.UIAbilityContext;
context.startAbility({
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'systemui_notification_settings', // uri为空的时候,拉起设置主页面
parameters: {
pushParams: {
bundleName: 'com.example.multishopping' // 传要跳转的对应应用的包名
}
}
});
})
}
.width('100%')
.height('100%')
}
}
更多关于HarmonyOS 鸿蒙Next中如何配置应用的权限?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中配置应用权限需通过模块配置文件进行。具体步骤:在项目的module.json5文件中,使用"requestPermissions"字段声明所需权限,包括权限名称、使用场景等属性。权限类型包括normal(普通权限)和system_basic(系统基础权限)等。配置后,系统会在应用安装或运行时根据权限级别提示用户授权。对于敏感权限,还需在应用内调用相关API动态申请用户同意。权限管理遵循最小化原则,仅申请必要权限。
在HarmonyOS Next中,应用权限配置主要通过以下步骤实现:
-
在
module.json5
文件中声明权限
在应用的module.json5
文件中的"abilities"
或"requestPermissions"
字段中声明所需的权限。例如:{ "module": { "requestPermissions": [ { "name": "ohos.permission.CAMERA", "reason": "需要访问摄像头以拍摄照片", "usedScene": { "abilities": ["MainAbility"], "when": "always" } } ] } }
-
动态申请敏感权限
对于敏感权限(如摄像头、位置等),需要在运行时通过requestPermissionsFromUser
API动态申请。示例代码:import abilityAccessCtrl from '[@ohos](/user/ohos).abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); atManager.requestPermissionsFromUser(this.context, ['ohos.permission.CAMERA']) .then((data) => { console.log('权限申请结果:', data.authResults); }) .catch((error) => { console.error('权限申请失败:', error); });
-
权限使用规范
- 仅申请应用功能必需的权限,并在
reason
字段中清晰说明使用目的。 - 遵循最小权限原则,避免过度申请。
- 仅申请应用功能必需的权限,并在
通过以上配置,应用可以安全、合规地使用系统权限。