当前位置: 首页 > article >正文

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

http://www.kler.cn/a/383484.html

相关文章:

  • 单元测试日志打印相关接口及类 Logger
  • 【实用教程】Blazor 文件管理器中引入分页功能
  • 数据结构与算法分析:专题内容——动态规划1之理论讲解(代码详解+万字长文+算法导论+力扣题)
  • 网页前端开发之HTML入门篇:表格标签 table
  • 论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck
  • 查看 linux ubuntu 分区 和 挂载 情况 lsblk
  • AI预测体彩排3采取888=3策略+和值012路+胆码+通杀1码测试11月7日升级新模型预测第127弹
  • AI在创造还是毁掉音乐?
  • Vue 指令
  • ENSP RIP动态路由
  • HLS SAMPLE-AES加密方法
  • 京东毫秒级热key探测框架JD-hotkey
  • 哈希表,哈希桶及配套习题
  • 数据分析:转录组差异fgsea富集分析
  • 第08章 排序ORDER BY
  • 创新实践:基于边缘智能+扣子的智慧婴儿监控解决方案
  • 歌词结构的艺术:写歌词的技巧和方法深度剖析,妙笔生词AI智能写歌词软件
  • 一篇掌握springboot集成gRPC
  • dcdc3节锂电池串联9-12V升压32V 3A/5A 音响供电恒压芯片 SL4010
  • CentOS 7 更换软件仓库
  • 【LeetCode】返回链表的中间结点、删除链表的倒数第 N 个结点
  • C#如何锁定和解除鼠标及键盘BlockInput
  • 08LangChain实战课 - 输出解析器深入与Pydantic解析器实战
  • 数据结构计算二叉树节点的个数
  • 代码随想录-字符串-实现strStr()--KMP
  • qgis加载获取远程wms数据失败