写点什么

【HarmonyOS Next】拒绝权限二次申请授权处理

作者:GeorgeGcs
  • 2025-03-24
    上海
  • 本文字数:826 字

    阅读完需:约 3 分钟

【HarmonyOS Next】拒绝权限二次申请授权处理

【HarmonyOS Next】拒绝权限二次申请授权处理

一、问题背景:


在鸿蒙系统中,对于用户权限的申请,会有三种用户选择方式:1.单次使用允许 2.使用应用期间(长时)允许 3.不允许


当用户选择不允许后,再次向用户申请权限,该弹框就不会再显示。因为鸿蒙系统机制处理如此,为了避免骚扰用户。


之前的通用方案是,跳转到应用设置界面,让用户自己去手动设置同意所需的权限。但是这样的操作,对于用户来说是跳出,体验并不是很好。


在此情况下,鸿蒙官方提供了】拒绝权限二次申请授权处理的新方案。

二、解决方案:

综上所述,当应用通过 requestPermissionsFromUser()拉起弹框请求用户授权时,用户拒绝授权。应用将无法再次通过该接口申请权限拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。


应用此种情况下,可以通过调用 requestPermissionOnSetting(),直接拉起权限设置弹框,引导用户授予权限。


atManager.requestPermissionOnSetting(context, ['ohos.permission.APPROXIMATELY_LOCATION']).then((data: Array<abilityAccessCtrl.GrantStatus>) => {  console.info('data:' + JSON.stringify(data));}).catch((err: BusinessError) => {  console.error('data:' + JSON.stringify(err));});
复制代码

三、源码示例:

直接拉起权限设置半模态弹框,引导用户授予权限。



申请 ohos.permission.CAMERA 权限


import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit';import { BusinessError } from '@kit.BasicServicesKit';
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();let context: Context = getContext(this) as common.UIAbilityContext;atManager.requestPermissionOnSetting(context, ['ohos.permission.CAMERA']).then((data: Array<abilityAccessCtrl.GrantStatus>) => { console.info('data:' + JSON.stringify(data));}).catch((err: BusinessError) => { console.error('data:' + JSON.stringify(err));});
复制代码


发布于: 刚刚阅读数: 4
用户头像

GeorgeGcs

关注

路漫漫其修远兮,吾将上下而求索。 2024-12-24 加入

历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 OpenHarmony,HarmonyOS,Flutter,H5,Android,IOS。 目前任职鸿蒙应用架构师。 HarmonyOS官方认证创作先锋

评论

发布
暂无评论
【HarmonyOS Next】拒绝权限二次申请授权处理_拒绝权限_GeorgeGcs_InfoQ写作社区