【HarmonyOS】引导用户跳转APP设置详情页开启权限
【HarmonyOS】引导用户跳转设置APP详情页开启权限
前言
众所周知在鸿蒙应用中,向用户申请权限时,会弹出系统请求授权的弹框。当用户拒绝了你申请的权限,弹框会直接关闭。当下次触发同样的权限申请,会直接返回失败,不会再唤起系统的权限申请弹框。
在这种场景下,我们需要引导用户去系统设置中,开启咱们的APP详情页,手动去开启权限。
很多应用会直接提示文本,让用户自己系统设置中找。这样的体验非常不友好,因为用户是很懒的,我们要减少用户的操作步骤。
解决方案
在以上的场景中,我们需要提示文本的基础上,添加自动跳转到设置应用的按钮,让用户快捷跳转到系统设置中,对应的APP详情页面。
如下图所示:
只需要在系统申请权限失败后,通过startAbility跳转到系统设置,通过配置参数为详情页和传递当前咱们应用的包名,就可以跳转到系统设置的APP详情页面。
这是目前已知的一种方式,如果有新的方式,欢迎讨论。
DEMO示例:
跳转到系统应用
private toSysSettingPage(){
globalThis.sysContext.startAbility({
bundleName: 'com.huawei.hmos.settings', //系统设置应用的包名
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry', // APP详情页
parameters: {
pushParams: globalThis.sysContext.abilityInfo.bundleName // 当前应用包名
}
});
}
权限申请示例:
async aboutToAppear() {
let isHave: boolean = await PermissionsUtil.requestPermission();
if(isHave){
// 用户允许权限后 doing
}else{
this.toSysSettingPage();
}
}
单一权限申请工具类:
import { abilityAccessCtrl, common } from '@kit.AbilityKit';
/**
* 权限工具
*/
export class PermissionsUtil{
static async reqPermissionsFromUser(): Promise<number[]> {
let context = getContext() as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
let grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.ACCESS_BLUETOOTH']);
return grantStatus.authResults;
}
/**
* 申请权限
* @returns
*/
static async requestPermission() {
let grantStatus = await PermissionsUtil.reqPermissionsFromUser()
for (let i = 0; i < grantStatus.length; i++) {
if (grantStatus[i] === 0) {
// 用户授权,可以继续访问目标操作
return true;
}
}
return false;
}
}