【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;}
}