如何创新玩转HarmonyOS鸿蒙Next开发:Stage模型中获取动态权限
如何创新玩转HarmonyOS鸿蒙Next开发:Stage模型中获取动态权限
Stage模型中获取动态权限
以允许应用读取日历信息为例进行说明。
1.在module.json5配置文件中声明权限
使用Stage模型的应用,需要在module.json5配置文件中声明权限。
{
"module": {
// ...
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.READ_MEDIA",
"reason": "$string:media_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.MEDIA_LOCATION",
"reason": "$string:media_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.LOCATION",
"reason": "$string:media_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.CAMERA",
"reason": "$string:media_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
}
]
}
}
2.可以在UIAbility的onCreate/onWindowStageCreate()回调中requestPermissionsFromUser
可以在UIAbility的onCreate或者onWindowStageCreate()回调中调用requestPermissionsFromUser()接口动态申请权限,也可以根据业务需要在UI界面中向用户申请授权。根据requestPermissionsFromUser()接口返回值判断是否已获取目标权限,如果当前已经获取权限,则可以继续正常访问目标接口。
在UIAbility中动态申请授权。
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { Permissions } from '@ohos.abilityAccessCtrl';
export default class EntryAbility extends UIAbility {
// ...
onCreate() {
let AtManager = abilityAccessCtrl.createAtManager();
AtManager.requestPermissionsFromUser(this.context, ['ohos.permission.READ_MEDIA', 'ohos.permission.MEDIA_LOCATION',"ohos.permission.LOCATION","ohos.permission.CAMERA"]).then((data) => {
hilog.info(0x0000, 'testTag', '%{public}s', 'request permissions from user success' + data);
}).catch((err) => {
hilog.error(0x0000, 'testTag', 'Failed to request permissions from user. Cause: %{public}s', JSON.stringify(err) ?? '');
});
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
}
3.也可以在UI界面中向用户申请授权。
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
@Entry
@Component
struct Index {
reqPermissions() {
let context = this.getContext() as common.UIAbilityContext;
let AtManager = abilityAccessCtrl.createAtManager();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
const permissions: Array<Permissions> = ['ohos.permission.READ_CALENDAR'];
AtManager.requestPermissionsFromUser(context, permissions).then((data) => {
console.info(`[requestPermissions] data: ${JSON.stringify(data)}`);
let grantStatus: Array<number> = data.authResults;
if (grantStatus[0] === -1) {
// 授权失败
} else {
// 授权成功
}
}).catch((err) => {
console.error(`[requestPermissions] Failed to start request permissions. Error: ${JSON.stringify(err)}`);
})
}
// 页面展示
build() {
// ...
}
}
到此,权限获取完毕。就可以继续后面的内容了,你学会了吗?
更多关于如何创新玩转HarmonyOS鸿蒙Next开发:Stage模型中获取动态权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于如何创新玩转HarmonyOS鸿蒙Next开发:Stage模型中获取动态权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next的Stage模型中,获取动态权限可以通过以下步骤实现:
- 声明权限:在
module.json5
文件中声明所需的权限。 - 请求权限:使用
requestPermissionsFromUser
方法请求权限,传入权限列表和回调函数。 - 处理回调:在回调函数中检查权限授予结果,根据结果执行相应操作。
示例代码:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
let permissions: Array<string> = ['ohos.permission.CAMERA'];
let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(this.context, permissions, (err, data) => {
if (err) {
console.error(`Request permissions failed, code is ${err.code}, message is ${err.message}`);
} else {
console.info('Request permissions success');
}
});