鸿蒙权限弹窗说明封装:使用library的简单实现

239 阅读4分钟

前言

简介

鸿蒙基本库封装,提升鸿蒙开发效率

安装

ohpm install @peakmain/library

效果图

权限弹窗说明.gif

导入依赖

import { IPermissionsDescBlock, PermissionDialogDescManager, PermissionUtils, ToastManager } from '@peakmain/library';

二、权限操作步骤及示例

1. 创建 request 对象

首先,需要创建一个 PermissionUtils 类的实例对象,用于后续的权限操作

request: PermissionUtils = new PermissionUtils()

2. 检查是否有权限

通过调用 request 对象的 hasPermissions 方法,并传入需要检查的权限数组,即可判断相应权限是否已被授予。示例代码及详细说明如下:

async checkPermission() {
    // 定义要检查的权限数组,此处以位置权限为例,实际使用中可替换为其他权限
    const permissionsArray = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];
    // 调用 hasPermissions 方法检查权限,返回结果为布尔值
    const result = await this.request.hasPermissions(permissionsArray);
    if (result) {
        promptAction.showToast({ message: "已授予位置权限" });
    }
    return result;
}

3. 请求权限

当检查到权限未被授予时,可调用 request 对象的 requestPermission 方法来请求权限

this.request.requestPermission(权限数组)

示例如下

async requestLocationPermission() {
    const permissionsArray = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];
    const result = await this.request.requestPermission(permissionsArray);
    if (result) {
        this.sLocation = true;
        promptAction.showToast({ message: "已授予位置权限" });
    } else {
        this.sLocation = false;
        promptAction.showToast({ message: "已拒绝位置权限" });
    }
}

4. 打开应用权限设置页面

若用户拒绝授予权限,可能需要引导用户手动去系统设置中开启权限,此时可以调用 request 对象的 openPermissionsInSystemSettings 方法来打开应用权限设置页面,示例代码如下

this.request.openPermissionsInSystemSettings()

5. 申请权限弹窗说明

以下是一个综合的权限申请流程示例,展示了如何先检查权限,在权限不足时进行申请,并根据申请结果给出相应提示,同时涉及到权限申请弹窗相关的自定义显示逻辑

async handleCameraPermission() {
    let result = await this.checkPermission(); // 判断是否有权限
    if (!result) { // 如果没有权限,则申请权限
        result = await this.request.requestPermission(['ohos.permission.CAMERA'],
            new PermissionsDescBlockImpl(this.getUIContext()));
        if (result) {
            new ToastManager(this.getUIContext()).showNormalMessage("已授予相机权限");
        } else {
            // this.request.openPermissionsInSystemSettings();
            new ToastManager(this.getUIContext()).showErrorMessage("已拒绝相机权限");
        }
    } else {
        new ToastManager(this.getUIContext()).showNormalMessage("已授予相机权限");
    }
}

在上述示例中:

  • 首先调用 checkPermission 方法检查相机权限是否已授予。
  • 若未授予(result 为 false),则调用 requestPermission 方法请求相机权限,并传入一个 PermissionsDescBlockImpl 类的实例,用于自定义权限申请弹窗的显示内容等相关操作(后续会详细介绍该类)。
  • 根据请求权限的结果,通过 ToastManager 分别显示相应的提示信息,告知用户权限授予或拒绝情况。

关于 PermissionsDescBlockImpl 类及相关的 PermissionDialogDescManager 类的详细说明如下:

PermissionsDescBlockImpl 类:

该类实现了 IPermissionsDescBlock 接口,用于在权限申请弹窗中自定义显示相关的逻辑

class PermissionsDescBlockImpl implements IPermissionsDescBlock {
    uiContext?: UIContext;
    manager?: PermissionDialogDescManager;

    constructor(uiContext: UIContext) {
        this.uiContext = uiContext;
        this.manager = new PermissionDialogDescManager(this.uiContext);
    }

    show(): void {
        this.manager?.showMessage("京东需要申请权限",
            "具体的内容具体的内容具体的内容具体的内容具体的内容具体的内容具体的内容");
    }

    hide() {
        this.manager?.hideMessage();
    }
}
  • 通过构造函数接收一个 UIContext 参数,用于后续获取相关的界面上下文信息。
  • 创建了一个 PermissionDialogDescManager 类的实例,借助该实例实现显示和隐藏权限申请弹窗以及设置弹窗显示内容的功能。
  • show 方法用于显示权限申请弹窗,并设置了一个固定的标题和一段示例内容(实际应用中应替换为准确合适的提示内容),调用 manager 的 showMessage 方法来实现显示操作。
  • hide 方法则调用 manager 的 hideMessage 方法来隐藏已显示的权限申请弹窗。

PermissionDialogDescManager 类:

该类作为顶部显示的布局管理器,主要负责权限申请弹窗的显示控制,核心方法有 showMessage 和 hide。

  • showMessage 方法用于设置并显示权限申请弹窗的标题和具体内容,开发人员可根据实际需求传入准确的提示信息,让用户清楚了解为什么应用需要申请该权限等内容。
  • hide 方法用于隐藏已经显示的权限申请弹窗,确保在合适的时机关闭弹窗,避免影响用户体验。