一.背景
之前系统校验权限没有通过的话是采用携带包名跳转系统设置页面进行权限开启(对用户不友好,现在新推出的授权弹窗,在当前app弹出,也可以更好的监听权限授权是否完成的回调)
二.代码
我这里以位置权限为例(校验位置和精确位置)两个权限申请
TypeScript
Text('去开启')
.width('50%')
.fontColor('#006BFF')
.fontSize(this.changeFontSize - 2)
.textAlign(TextAlign.Center)
.onClick(() => {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext;
this.controller?.close()
atManager.requestPermissionOnSetting(context,
['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'])
.then((data: Array<abilityAccessCtrl.GrantStatus>) => {
// 如果是一个权限替换为这行代码
// if (data[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
// 多个权限校验
const allGranted = data.every((res) => res === 0);
if (allGranted) {
//通过校验事件 申请权限成功
} else {
//没有通过
promptAction.showToast({
message: '请打开位置权限(包括精确位置)',
duration: 2000,
alignment: Alignment.Center
})
}
})
.catch((err: BusinessError) => {
// hilog.error(0x0000, 'testTag', `data: ${JSON.stringify(err)}`);
});
//旧版挑战申请
// this.openPermissionSettingsInSettingPage()
})