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

通知介绍

通知分类

根据内容样式划分

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

这是最常用的通知类型,根据 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()

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐