【HarmonyOS NEXT】引导用户跳转APP设置详情页开启权限

396 阅读2分钟

【HarmonyOS NEXT】引导用户跳转设置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;
  }
}