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

鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)

文章目录

      • 一、通知介绍
        • 1、通知表现形式
        • 2、通知结构
        • 3、请求通知授权
      • 二、创建通知
        • 1、发布基础类型通知
        • 2、发布进度类型通知
        • 3、更新通知
        • 4、移除通知
      • 三、设置通知通道
        • 1、通知通道类型
      • 四、创建通知组
      • 五、为通知添加行为意图
        • 1、导入模块。
        • 2、创建WantAgentInfo信息。
        • 4、创建WantAgent对象。
        • 5、构造NotificationRequest对象。
        • 6、发布WantAgent通知。

一、通知介绍

通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景:

  • 显示接收到的短消息、即时消息等。
  • 显示应用的推送消息,如广告、版本更新等。
  • 显示当前正在进行的事件,如下载等。
1、通知表现形式

通知会在不同场景以不同形式提示用户,例如通知在状态栏上显示为图标、在通知栏上会显示通知详细信息。重要的信息还可以使用横幅通知,浮动在界面顶部显示。

在这里插入图片描述

2、通知结构

下面以基础的文本通知为例,介绍通知的基本结构。

在这里插入图片描述

  1. 通知小图标:表示通知的功能与类型。

  2. 通知名称:应用名称或功能名称。

  3. 时间:发送通知的时间,系统默认显示。

  4. 展开箭头:点击标题区,展开被折叠的内容和按钮。若无折叠的内容和按钮,不显示此箭头。

  5. 内容标题:描述简明概要。

  6. 内容详情:描述具体内容或详情。

3、请求通知授权

应用需要获取用户授权才能发送通知。在通知发布前调用requestEnableNotification()方法,弹窗让用户选择是否允许发送通知,后续再次调用requestEnableNotification()方法时,则不再弹窗。

  • 导入NotificationManager模块。
import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
  • 请求通知授权。

可通过requestEnableNotification的错误码判断用户是否授权。

let context = getContext(this) as common.UIAbilityContext;
notificationManager.isNotificationEnabled().then((data: boolean) => {console.info("isNotificationEnabled success");if(!data){notificationManager.requestEnableNotification(context).then(() => {console.info(`requestEnableNotification success`);}).catch((err : BusinessError) => {if(1600004 == err.code){console.error(`requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);} else {console.error(`requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);}});}
}).catch((err : BusinessError) => {console.error(`isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);
});

二、创建通知

本节将介绍几种常见类型通知的创建,在创建通知前需要先导入notificationManager模块,该模块提供通知管理的能力,包括发布、取消发布通知,创建、获取、移除通知通道等能力。

import { notificationManager } from '@kit.NotificationKit';
1、发布基础类型通知

基础类型通知主要应用于发送短信息、提示信息、广告推送等,支持普通文本类型、长文本类型、多行文本类型,可以通过ContentType指定通知的内容类型。下面以普通文本类型为例来介绍基础通知的发布,其它基础类型您可以查阅API。
在这里插入图片描述
发布普通文本类型通知,需要设置ContentType类型为ContentType.NOTIFICATION_CONTENT_BASIC_TEXT。

@Entry 
@Component 
struct NotificationDemo { publishNotification() { let notificationRequest: notificationManager.NotificationRequest = { // 描述通知的请求 id: 1, // 通知ID  content: { // 通知内容 notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知 normal: { // 基本类型通知内容 title: '通知内容标题', text: '通知内容详情' } } } notificationManager.publish(notificationRequest).then(() => { // 发布通知 console.info('publish success'); }).catch((err: Error) => { console.error(`publish failed,message is ${err}`); }); } build() { Column() { Button('发送通知') .onClick(() => { this.publishNotification() }) } .width('100%') } 
}

在这里插入图片描述

2、发布进度类型通知

进度条通知也是常见的通知类型,主要应用于文件下载、事务处理进度显示。目前系统模板仅支持进度条模板,效果示意如下图所示:
核心代码

  /*** 查询系统是否支持进度条模板*/notificationManager.isSupportTemplate('downloadTemplate').then(isSupport => {// isSupport的值为true表示支持downloadTemplate模板类通知,false表示不支持this.isSupport = isSupport;});/*** 开始下载*/download() {//通过定时器更新进度到通知this.interval = setInterval(() => {if (this.downloadProgress === 100) {this.downloadStatus = 3;this.notificationTitle = '已完成'clearInterval(this.interval);} else {this.downloadProgress += 2}if (this.isSupport) {this.publishNotification(this.downloadProgress, this.notificationTitle, this.wantAgentObj);}}, 1000);}/*** 发布通知*/publishNotification(progress: number, title: string, wantAgentObj: object) {//构造进度条模板对象let template: notificationManager.NotificationTemplate = {// 构造进度条模板,name字段当前需要固定配置为downloadTemplatename: 'downloadTemplate',data: {title: `${title}`,fileName: `鸿蒙教程文件.zip`,progressValue: progress,progressMaxValue: 100,isProgressIndeterminate: false}};let notificationRequest: notificationManager.NotificationRequest = {id: 10000,//内容资讯notificationSlotType: notificationManager.SlotType.CONTENT_INFORMATION,template: template,content: {//普通类型通知notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: `鸿蒙教程文件.zip`,text: ' ',additionalText: `${progress}%`}},wantAgent: wantAgentObj};// 发布通知notificationManager.publish(notificationRequest).catch((err: Error) => {console.error(`publish failed,message is ${err}`);});}

在这里插入图片描述

3、更新通知

在发出通知后,使用您之前使用的相同通知ID,再次调用notificationManager.publish来实现通知的更新。如果之前的通知是关闭的,将会创建新通知。

4、移除通知
  • 通过通知ID和通知标签取消已发布的通知。
    notificationManager.cancel(notificationId)

  • 取消所有已发布的通知。
    notificationManager.cancelAll()

三、设置通知通道

通过通知通道,您可让通知有不同的表现形式,比如社交类型的通知是横幅显示的,并且有提示音,而一般的通知则不会横幅显示,您可以使用slotType来实现,设置slotType为SlotType.SOCIAL_COMMUNICATION,表示为社交类型通知。

示例代码如下:

notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION).then(() => {console.info("addSlot success");
}).catch((err: Base.BusinessError) => {console.error(`addSlot fail: ${JSON.stringify(err)}`);
});

效果图如下:

在这里插入图片描述

1、通知通道类型

不同类型的通知渠道对应的通知提醒方式不同,详见下表。其中,Y代表支持,N代表不支持。
在这里插入图片描述

四、创建通知组

将不同类型的通知分为不同的组,以便用户可以更好的管理他们。当同组的通知有多条的时候,会自动折叠起来,避免通知比较多的时候,通知界面比较杂乱,例如当通知栏里有聊天消息通知和商品推荐通知时,我们只需要通过设置字段groupName,就可以对通知进行分组,给groupName设置不同的值可以将通知分为不同的组。

在这里插入图片描述

您可以使用groupName来指定通知组来实现,

示例代码如下:

let notifyId = 0; let chatRequest: notificationManager.NotificationRequest = {  id: notifyId++, groupName:'ChatGroup', content: { //... } }; let productRequest: notificationManager.NotificationRequest = {  id: notifyId++, groupName: 'ProductGroup', content: { //... } };

五、为通知添加行为意图

WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。给通知添加行为意图后,点击通知后可以拉起指定的UIAbility或者发布公共事件,您可以按照以下步骤来实现:

1、导入模块。
import { notificationManager } from '@kit.NotificationKit'; 
import { wantAgent, WantAgent } from '@kit.AbilityKit';
2、创建WantAgentInfo信息。
  • 场景一:拉起UIAbility。
let wantAgentInfo = { wants: [ { bundleName: "com.example.notification", abilityName: "EntryAbility" } ], operationType: wantAgent.OperationType.START_ABILITY, requestCode: 100 
}
  • 场景二:发布公共事件。
let wantAgentInfo = { wants: [ { action: 'event_name', // 设置事件名 parameters: {}, } ], operationType: wantAgent.OperationType.SEND_COMMON_EVENT, requestCode: 100, wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG], 
}
4、创建WantAgent对象。
let wantAgentObj = null;  
wantAgent.getWantAgent(wantAgentInfo) .then((data) => { wantAgentObj = data; }) .catch((err: Error) => { console.error(`get wantAgent failed because ${JSON.stringify(err)}`); })
5、构造NotificationRequest对象。
let notificationRequest: notificationManager.NotificationRequest = {id: 1, content: { notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, normal: { title: "通知标题", text: "通知内容" } }, wantAgent: wantAgentObj 
};
6、发布WantAgent通知。
notificationManager.publish(notificationRequest).then(() => { // 发布通知console.info("publish success"); 
}).catch((err: Error) => { console.error(`publish failed, code is ${err.code}, message is ${err.message}`); 
});  

用户通过点击通知栏上的通知,即可触发WantAgent的动作。

相关文章:

鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)

文章目录 一、通知介绍1、通知表现形式2、通知结构3、请求通知授权 二、创建通知1、发布基础类型通知2、发布进度类型通知3、更新通知4、移除通知 三、设置通知通道1、通知通道类型 四、创建通知组五、为通知添加行为意图1、导入模块。2、创建WantAgentInfo信息。4、创建WantAg…...

从零开始使用YOLOv11——Yolo检测detect数据集自建格式转换为模型训练格式:20w+图片1w+类别代码测试成功

在之前的文章中记录了YOLO环境的配置安装和基本命令的一些使用,上一篇博文的地址快速链接:从零开始使用YOLOv8——环境配置与极简指令(CLI)操作:1篇文章解决—直接使用:模型部署 and 自建数据集&#xff1a…...

自动化新时代:机器取代工作,我们该如何重塑自我?

内容概要 在自动化时代的浪潮中,技术的飞速发展对传统工作模式产生了深远影响。我们眼前浮现的是一个充满机遇与挑战的新世界。许多岗位面临被机器取代的威胁,然而,这一变化并不仅仅是消极的。在这个背景下,个体不仅需要重新审视…...

GEE 土地分类——利用Sentinel-2数据进行土地分类

目录 简介 函数 ee.Classifier.smileRandomForest(numberOfTrees, variablesPerSplit, minLeafPopulation, bagFraction, maxNodes, seed) Arguments: Returns: Classifier 代码 结果 简介 利用Sentinel-2数据进行土地分类的流程大致可分为以下几个步骤: 1. 数据获取…...

《C++ 游戏开发》

一、引言 在当今的数字娱乐时代,游戏开发已经成为一个充满活力和创新的领域。C 作为一种强大的编程语言,在游戏开发中占据着重要的地位。它具有高效的性能、丰富的功能和广泛的适用性,能够满足游戏开发中对性能和灵活性的高要求。本文将深入探…...

2024年11月10日系统架构设计师考试题目回顾

案例分析 试题一:质量属性 基于描述填空是什么质量属性,常规题。(性能,功能,安全,可用等等)可用性而言,王工建议采用 ping/echo 机制检测,不过从资源使用角度&#xff…...

测试实项中的偶必现难测bug--苹果支付丢单问题

问题描述: app支付后,由于某种原因(可能是网络、流量不稳定、或者用户快速频繁操作。。。)会造成一定概率性的回调苹果支付结果失败的情况出现,表现的直观现象就是客户反馈已经支付了,包括苹果支付也是有记录,但是我们的后台显示的是已取消状态的订单 验证难点:测试和…...

Elasticsearch的数据类型

Elasticsearch(简称 ES)支持多种数据类型,主要分为以下几类: 1. 基本数据类型 Text:用于全文搜索的文本字段。ES 会对其内容进行分词处理。Keyword:适用于精确匹配的字段,例如名称、标签等。ES 不会对其内容分词处理。Integer:整数类型,包括 byte、short、integer 和…...

SSL 证书申请以及配置流程

SSL 证书申请以及配置流程 手动申请免费 SSL 证书的简明指南 如果你希望手动为你的网站申请免费的 SSL 证书,Let’s Encrypt 提供了一个很棒的免费服务。而 Certbot 则是官方推荐的工具,可以帮助你完成证书的申请和配置。以下是如何一步步完成的详细说…...

[Docker#4] 镜像仓库 | 部分常用命令

目录 什么是 Docker Registry 镜像仓库生活案例 镜像仓库分类 镜像仓库工作机制 常用的镜像仓库 私有仓库 镜像仓库命令 镜像命令[部分] 容器命令[部分] 什么是 Docker Registry 定义:Docker Registry 负责存储、管理和分发镜像,并提供了登录认…...

工业通信协议对比:OPC-UA、Modbus、MQTT、HTTP

综合对比表 对比项OPC-UAModbusMQTTHTTP通信效率低,带宽消耗高高高,开销低,效率高低,带宽消耗大实时性一般,延迟较高高,延迟低高,低延迟低,延迟高性能消耗高,需要高性能…...

docker 常用方法

目录 docker参数解释 基础信息和环境变量设置 容器运行和管理相关参数 数据卷挂载 GPU 相关参数 镜像相关参数 查看现有的镜像 docker images 查看正在运行的docker docker ps 1、docker启动停止及查看状态 启动docker: systemctl start docker 停止docker…...

区块链技术入门:以太坊智能合约详解

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术入门:以太坊智能合约详解 区块链技术入门:以太坊智能合约详解 区块链技术入门:以太…...

特定数据库的备份脚本

该脚本 mysql_backup.sh 是一个 MySQL 数据库的备份脚本,以下是它的工作原理和需要注意的细节: 脚本内容分析 1.设置时间变量 TIME : TIMEdate %F_%H-%M-%S该变量 TIME 存储当前日期和时间,格式为 YYYY-MM-DD_HH-MM-SS,用于生…...

uni-app打包后报错云服务空间未关联

使用uni-app打包到h5 项目里面用到了uni-app的云端一体城市选择组件,这个组件数据用到了uniCloud云服务空间,在本地运行没问题,打包之后测试环境报错: 一顿查,查到了官网是这样说的: cli publish --platfo…...

FPGA学习(10)-数码管

前3节视频目的是实现显示0~F的数码管仿真,后3节是用驱动芯片驱动数码管。 目录 1.数码管显示原理 2.代码过程 2.1仿真结果 3.串行移位寄存器原理 3.1原理 ​编辑 3.2 数据手册 3.3 先行设计思路 4.程序 4.1确定SRCLK的频率 4.2序列计数器 4.3 不同coun…...

C++(继承)

继承的语法 继承的好处:减少重复代码 语法: class 子类 : 继承方法 父类 子类 也称为 派生类 父类 也成为 基类 继承方式 公共继承 保护继承 私有继承 结论:父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后…...

华为OD机试 - RSA加密算法(Java 2024 E卷 100分)

long n (long) Math.sqrt(num); 与long n (long) Math.floor(Math.sqrt(num)); 这两行代码的目的都是计算 num 的平方根,并将结果转换为 long 类型的整数。然而,它们在处理方式上有一些微小的差别。 long n (long) Math.sqrt(num);long n (long) M…...

分组校验在Spring中的应用详解

目录 前言1. 什么是分组校验2. 分组校验的基本原理3. 分组校验的实现步骤3.1 定义分组接口3.2 在校验项中指定分组3.3 校验时指定要校验的分组3.4 默认分组和分组的继承 4. 分组校验的优势和适用场景4.1 优势4.2 适用场景 5. 常见问题与解决方案5.1 校验未生效5.2 无法识别默认…...

torch.nn.**和torch.nn.functional.**的区别

torch.nn.** torch.nn.**是一个继承了torch.nn.Module的类,使用前必须先构造对象,然后再调用。如果直接使用则会报错 例如 a torch.randn(3,4) print(a) sigmoid torch.nn.Sigmoid() a sigmoid(a) print(a) a torch.nn.Sigmoid(a)tensor([[ 0.2462…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...