news 2026/3/3 19:10:11

鸿蒙中级课程笔记7—给应用添加通知

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙中级课程笔记7—给应用添加通知

注意本章实现的为本地通知

通知介绍

通知分类

根据内容样式划分

分类维度具体类型说明与用途
🎨 按内容样式分类基础类型用于展示静态的文本或图片信息。
模板类型用于展示动态变化的内容,最常见的是进度条
基础通知分类

这是最常用的通知类型,根据contentType的不同,又细分为以下几种样式:

具体类型 (contentType)样式特点适用场景举例
普通文本包含标题、正文和附加文本的简单文本通知。即时消息、简短提醒。
长文本可以展开查看详细长内容的通知。邮件正文、长文章摘要。
多行文本在通知中直接并列显示多条简短信息。聊天记录、待办事项列表。
图片可以附带一张图片的通知。社交媒体、图片新闻。

根据通道类型划分

通过通道类型对通知采取不同的管理策略(如提示音、是否横幅弹出等)。常见类型有社交通讯、服务提醒、内容资讯等

通道类型状态栏图标横幅提示提示音适用场景
SOCIAL_COMMUNICATION社交类型通知
SERVICE_INFORMATION服务类型通知
CONTENT_INFORMATION新闻资讯
OTHER_TYPES后台静默通知
let notificationRequest: notificationManager.NotificationRequest = { //社交类型通知 notificationSlotType: notificationManager.SlotType.SOCIAL_COMMUNICATION, // ... };

通知表现形式

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

通知结构

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

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

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

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

4. 展开箭头:点击后,展开/收起被折叠的内容和按钮。若无折叠的内容和按钮,不显示此箭头。

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

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

通知组

将不同类型的通知分为不同的组,以便用户可以更好的管理他们。当同组的通知有多条的时候,会自动折叠起来,避免通知比较多的时候,通知界面比较杂乱

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

通知响应

开发者通过给通知添加行为意图WantAgent,来实现给通知添加响应事件。比如当用户点击下载通知的时候可以快速拉起下载详情页面,进行对下载任务的操作。

创建通知

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

import { notificationManager } from '@kit.NotificationKit';

发布基础类型通知

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

  • 发布普通文本类型通知,需要设置ContentType类型为ContentType.NOTIFICATION_CONTENT_BASIC_TEXT。

说明

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

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}`); }); }

发布进度类型通知

进度条通知也是常见的通知类型,主要应用于文件下载、事务处理进度显示。目前系统模板仅支持进度条模板

在发布进度类型通知前需要查询系统是否支持进度条模板。

notificationManager.isSupportTemplate('downloadTemplate').then(isSupport => { if (!isSupport) { this.getUIContext().getPromptAction().showToast({ message: $r('app.string.invalid_button_toast') }) } this.isSupport = isSupport; });

构造进度条模板,name字段当前需要固定配置为downloadTemplate。进度类型通知,设置contentType类型为ContentType.NOTIFICATION_CONTENT_BASIC_TEXT

let template:notificationManager.NotificationTemplate = { name: 'downloadTemplate', data: { title: `${title}`, fileName: `${title}:${CommonConstants.DOWNLOAD_FILE}`, progressValue: progress, progressMaxValue: CommonConstants.PROGRESS_TOTAL, isProgressIndeterminate: false } }; let notificationRequest: notificationManager.NotificationRequest = { id: CommonConstants.NOTIFICATION_ID, notificationSlotType: notificationManager.SlotType.CONTENT_INFORMATION, // Construct a progress bar template. The name field must be set to downloadTemplate. template: template, content: { notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, normal: { title: `${title}:${CommonConstants.DOWNLOAD_FILE}`, text: ' ', additionalText: `${progress}%` } }, wantAgent: wantAgentObj }; notificationManager.publish(notificationRequest).catch((err: Error) => { Logger.error(`[ANS] publish failed,message is ${err}`); });

具体代码可以参考进度条通知案例

更新通知

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

移除通知

  • 通过通知ID和通知标签取消已发布的通知。

    notificationManager.cancel(notificationId)

  • 取消所有已发布的通知。

    notificationManager.cancelAll()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 18:28:15

2026年,学R语言,为什么399元的专栏真的很值,你只需要这一份资料,其它图文资料不再需要买了!

当前医药数据科学和R语言领域,网络上和书籍市面上一大堆资料,表面看起来琳琅满目,价格从几十元的书籍到动辄几千元一次的线下培训班都有。但绝大多数培训或书籍都受限于时间和篇幅,浅尝辄止,很多仅仅是基础入门&#x…

作者头像 李华
网站建设 2026/3/3 14:15:20

在你的Node.js项目中轻松集成WhatsApp功能!

WhatsApp Web.js:轻松构建Node.js WhatsApp客户端的最佳解决方案 在现代通信中,WhatsApp已经是一个不可或缺的工具,不论是个人还是企业都在使用WhatsApp与客户沟通。今天,我们向大家介绍一个强大的开源库——WhatsApp Web.js&…

作者头像 李华
网站建设 2026/2/16 9:20:56

图片画质增强神器!模糊照片秒变高清

下载链接 https://pan.freedw.com/s/NN5rm8 今天发现个超好用的画质增强工具,不用安装解压就能用,再也不用为模糊照片发愁了!不管是老照片修复还是手机拍糊了的图片,这个软件都能一键处理成高清画质。 软件主要分图片增强和视频…

作者头像 李华
网站建设 2026/3/2 0:02:09

使用Pandas进行数据分析:从数据清洗到可视化

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。 目录 安装SQLAlchemy 核心概念 连接数据库 定义数据模型 创建数据库表 基本CRUD操作…

作者头像 李华
网站建设 2026/3/1 11:01:39

编译器命令选项优化

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第…

作者头像 李华
网站建设 2026/3/2 2:52:29

Python Web爬虫入门:使用Requests和BeautifulSoup

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。目录安装SQLAlchemy核心概念连接数据库定义数据模型创建数据库表基本CRUD操作查询数据关系操…

作者头像 李华