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

鸿蒙中级课程笔记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()

http://www.jsqmd.com/news/327014/

相关文章:

  • 2026-01-31 ChpoBERT:面向中文政策文本的预训练模型
  • 从零到一:一个广州兼职PHP项目的敏捷交付与长期维护实践
  • 凌晨两点调 API 调到崩溃,直到 MCP 出现——AI 终于有了统一接口
  • 复现模拟退火、粒子群算法解约束最优化问题 内容: 程序一:模拟退火算法SA算法求解附图所示变速...
  • 3.MySQL 数据库集成 - 实践
  • 2026年广州PHP兼职全攻略:常见问题与狗蛋斯工作室实践
  • MCP 协议:让 AI 像插 USB 一样连接万物,我们在 Sealos 上跑通了
  • AI辅助API设计:提高接口的一致性与可用性
  • 1月31号
  • 实用指南:python+django/flask的结合人脸识别和实名认证的校园论坛系统
  • C++可变模板参数详细讲解
  • Java 基础全攻略:从语法到实战项目(简单总结)
  • 2024提示工程架构师技术路线图:最佳实践版(大厂都在用)!
  • Vue Day3
  • 2026年,学R语言,为什么399元的专栏真的很值,你只需要这一份资料,其它图文资料不再需要买了!
  • 大数据领域数据合规的最佳实践案例
  • 英语学习激励|基于java+vue的英语学习交流平台优秀的系统小程序(源码+数据库+文档)
  • 2024年ESWA SCI1区TOP,异构无人机配送问题的集成多目标优化方法,深度解析+性能实测
  • 【图像处理相关毕设选题选题指导】2026新颖优质选题推荐
  • Linux Lite 7.8重磅发布,12款核心应用全面重写,正式迈向Python + GTK4新时代!
  • 代码动态分析工具
  • 浔川社团关于产品数据情况的官方通告
  • Linux的Ext系列文件系统
  • 职场总遇“奇葩”?可能是你心里的“老剧本”卡了Bug,咱们来修修它
  • Python面向对象编程(OOP)终极指南
  • esm.sh路径遍历漏洞深度解析:CVE-2026-23644技术细节与修复方案
  • 【题解】P12766 [POI 2018 R3] 完备数 Complete numbers
  • C++中的工厂模式变体
  • LSTM长短期记忆神经网络分位数回归多输入单输出(Matlab) 1.输入多个特征,输出单个特...
  • 高性能日志库C++实现