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

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

通知介绍

通知分类

根据内容样式划分

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

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

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

根据通道类型划分

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

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

通知表现形式

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

通知结构

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

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

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

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

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

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

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

通知组

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

TypeScript 复制代码
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()方法时,则不再弹窗。具体请查看请求通知授权

TypeScript 复制代码
  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}`); 
    }); 
  } 

发布进度类型通知

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

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

TypeScript 复制代码
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 。

TypeScript 复制代码
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()

相关推荐
码农的小菜园12 小时前
gradle常用指令使用笔记
笔记
鸟电波12 小时前
硬件笔记——示波器篇
笔记
Don.TIk12 小时前
SpringCloud学习笔记
笔记·学习·spring cloud
cd118405114 小时前
AutoCAD Electrical 2020学习笔记
笔记·学习
Sarvartha15 小时前
递归、回溯与动态规划学习笔记
笔记·学习·动态规划
眼镜哥(with glasses)15 小时前
网络技术三级考试综合题笔记整理(第二题、第三题)
网络·笔记·智能路由器
半壶清水15 小时前
[软考网规考点笔记]-数据通信基础之差错控制编码技术
网络·笔记·网络协议·tcp/ip
左左右右左右摇晃15 小时前
Java List集合
笔记
OxyTheCrack15 小时前
【C++】详细拆解std::mutex的底层原理
linux·开发语言·c++·笔记
左左右右左右摇晃16 小时前
红黑树笔记整理
笔记