HarmonyOS 鸿蒙Next 出发位置权限请求弹框点击禁止后下次再请求授权不再弹出系统权限弹框如何设置一个自定义弹框提示用户一键跳转设置页手动选择位置权限

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 出发位置权限请求弹框点击禁止后下次再请求授权不再弹出系统权限弹框如何设置一个自定义弹框提示用户一键跳转设置页手动选择位置权限 跳转对应的设置页也不难,难得是那个出现自定义弹框的逻辑,在第一次安装的时候会随着系统授权窗口一起出来,有没有好的方案勒

4 回复

1、先使用checkAccessToken检查是否有权限

2、如果有权限,执行你想要的逻辑

3、如果没权限,则继续申请选项

4、如果用户拒绝,则弹出再次申请权限的弹框【这个逻辑我这边已经封装好】

PermissionUtils.with().request('ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION').then(res => {
    if (res.allGranted) {
        ToastUtils.show('已授权A')
        this.havePermissions = true
    } else {
        // 弹出再次申请授权的弹框
        res.requestPermissionOnSetting?.().then(resSetting => {
            if (resSetting.allGranted) {
                ToastUtils.show('已再次授权A')
                this.havePermissions = true
            } else {
                ToastUtils.show('已拒绝B')
            }
        })
    }
})

源码: https://github.com/tanranran/HarmonyUtilCode/blob/master/utilcode/src/main/ets/permissions/PermissionUtils.ets

更多关于HarmonyOS 鸿蒙Next 出发位置权限请求弹框点击禁止后下次再请求授权不再弹出系统权限弹框如何设置一个自定义弹框提示用户一键跳转设置页手动选择位置权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以通过以下步骤设置一个自定义弹框,引导用户手动前往设置页面修改权限:

  1. 检测权限状态 :首先,你需要检测当前应用是否已经获得了位置权限。这可以通过调用 checkAccessTokenSync 方法来检查。
import { abilityAccessCtrl } from '@kit.AbilityKit';

let atManager = abilityAccessCtrl.createAtManager();
let tokenId = getAccessTokenId(); // 确保你已经有了应用的tokenID
let locationPermission = atManager.checkAccessTokenSync(tokenId, 'ohos.permission.LOCATION');
  1. 处理权限不足 :如果检测到位置权限未被授权,由于系统不会再次自动弹出权限请求框,你需要提供一个按钮或链接,引导用户去手动设置权限。
// 在UI中显示一个按钮或链接,让用户手动前往设置页面
buttonClickHandler() {
    // 使用系统的URI方案引导用户前往应用的权限设置页面
    let uri = `harmonyos://settings/accessibility?bundleName=${getBundleName()}`;
    navigateTo(uri);
}
  1. 设计自定义弹框 :你可以使用鸿蒙的UI组件来设计一个自定义弹框,告知用户需要手动设置位置权限,并提供一个按钮直接导航到设置页面。
import { Dialog } from '@kit.ArkUI';

showPermissionDialog() {
    Dialog.alert({
        title: '权限需要',
        message: '此应用需要位置权限才能正常工作。请前往设置页面手动授权。',
        confirmButtonText: '前往设置',
        cancelButtonText: '取消',
        onConfirm: () => {
            let uri = `harmonyos://settings/accessibility?bundleName=${getBundleName()}`;
            navigateTo(uri);
        }
    }).show();
}

这样做在实际调试中应该会发生首次安装APP后,第一次请求权限,我们自定义的弹框和系统的授权弹框同时弹出的情况呢,

在HarmonyOS鸿蒙系统中,当用户拒绝位置权限请求且选择“禁止”后,系统默认不会再次弹出权限请求弹框以保护用户隐私。若希望在用户下次尝试使用需要位置权限的功能时,显示一个自定义弹框提示用户并一键跳转至系统设置页手动选择位置权限,可以通过以下方式实现:

  1. 检测权限状态:在尝试使用位置功能前,先检查当前权限状态。若权限被拒绝且用户之前选择了“禁止”,则不触发系统权限请求弹框。

  2. 显示自定义弹框:当检测到权限被拒绝时,显示一个自定义的弹框,提示用户需要位置权限,并提供一个按钮引导用户前往系统设置页。

  3. 跳转至系统设置页:在自定义弹框的按钮点击事件中,使用Intent跳转到系统设置中的权限管理页面,让用户手动开启权限。Intent的URI需要根据鸿蒙系统的API文档构造,指向位置权限的设置页面。

实现上述功能需要利用鸿蒙系统提供的UI框架和Intent机制。由于具体实现细节可能涉及API调用和布局设计,这里不再展开。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部