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



所有评论(0)