#创作者激励# 在HarmonyOS/OpenHarmony中如何发送通知消息 原创

鸿蒙坚果派
发布于 2023-3-6 11:57
浏览
0收藏

【本文正在参加2023年第一期优质创作者激励计划】

在日常的开发中,我们常常会需要通过通知接口发送通知消息,那么在HarmonyOS/OpenHarmony中是如何实现的呢?

本文就来带大家了解一下。

通知

应用可以通过通知接口发送通知消息,终端用户可以通过通知栏查看通知内容,也可以点击通知来打开应用。

通知常见的使用场景:

  • 显示接收到的短消息、即时消息等。
  • 显示应用的推送消息,如广告、版本更新等。
  • 显示当前正在进行的事件,如下载等。

HarmonyOS通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,如基础类型通知、进度条类型通知。

通知业务流程

通知业务流程由通知子系统、通知发送端、通知订阅端组成。

一条通知从通知发送端产生,通过IPC通信发送到通知子系统,再由通知子系统分发给通知订阅端。

系统应用还支持通知相关配置,如使能开关、配置参数由系统配置发起请求,发送到通知子系统存储到内存和数据库。

#创作者激励# 在HarmonyOS/OpenHarmony中如何发送通知消息-鸿蒙开发者社区

发布基础类型通知

基础类型通知主要应用于发送短信息、提示信息、广告推送等,支持普通文本类型、长文本类型、多行文本类型和图片类型。

表1 基础类型通知中的内容分类

类型 描述
NOTIFICATION_CONTENT_BASIC_TEXT 普通文本类型。
NOTIFICATION_CONTENT_LONG_TEXT 长文本类型。
NOTIFICATION_CONTENT_MULTILINE 多行文本类型。
NOTIFICATION_CONTENT_PICTURE 图片类型。

目前系统仅通知栏订阅了通知,将通知显示在通知栏里。基础类型通知呈现效果示意图如下所示。

接口说明

通知发布接口如下表所示,不同发布类型通知由NotificationRequest的字段携带不同的信息。

接口名 描述
publish(request: NotificationRequest, callback: AsyncCallback<void>): void 发布通知。
cancel(id: number, label: string, callback: AsyncCallback<void>): void 取消指定的通知。
cancelAll(callback: AsyncCallback<void>): void; 取消所有该应用发布的通知。

NotificationRequest

描述通知的请求。

系统能力:以下各项对应的系统能力均为SystemCapability.Notification.Notification

名称 类型 可读 可写 说明
content NotificationContent 通知内容。
id number 通知ID。
slotType SlotType 通道类型。
isOngoing boolean 是否进行时通知。
isUnremovable boolean 是否可移除。
deliveryTime number 通知发送时间。
tapDismissed boolean 通知是否自动清除。
autoDeletedTime number 自动清除的时间。
wantAgent WantAgent WantAgent封装了应用的行为意图,点击通知时触发该行为。
extraInfo {[key: string]: any} 扩展参数。
color number 通知背景颜色。暂不支持。
colorEnabled boolean 通知背景颜色是否使能。暂不支持。
isAlertOnce boolean 设置是否仅有一次此通知警报。
isStopwatch boolean 是否显示已用时间。
isCountDown boolean 是否显示倒计时时间。
isFloatingIcon boolean 是否显示状态栏图标。
label string 通知标签。
badgeIconStyle number 通知角标类型。
showDeliveryTime boolean 是否显示分发时间。
actionButtons Array<NotificationActionButton> 通知按钮,最多两个按钮。
smallIcon PixelMap 通知小图标。
largeIcon PixelMap 通知大图标。
creatorBundleName string 创建通知的包名。
creatorUid number 创建通知的UID。
creatorPid number 创建通知的PID。
creatorUserId8+ number 创建通知的UserId。
hashCode string 通知唯一标识。
groupName8+ string 组通知名称。
template8+ NotificationTemplate 通知模板。
distributedOption8+ DistributedOptions 分布式通知的选项。
notificationFlags8+ NotificationFlags 获取NotificationFlags。
removalWantAgent9+ WantAgent 当移除通知时,通知将被重定向到的WantAgent实例。
badgeNumber9+ number 应用程序图标上显示的通知数。

开发步骤

1.导入模块。

import NotificationManager from '@ohos.notificationManager';

2.构造NotificationRequest对象,

构造NotificationRequest对象,并发布通知。

  • 普通文本类型通知由标题、文本内容和附加信息三个字段组成,其中标题和文本内容是必填字段,大小均需要小于200字节。

      Text("普通文本类型")
              .fontSize (50)
              .fontWeight(FontWeight.Bold).onClick(()=>{
              let notificationRequest = {
                id: 1,
                content: {
                  contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
                  normal: {
                    title: '通知标题',//通知标题。
                    text: '通知内容',//通知内容。
                    additionalText: '通知次要内容,是对通知内容的补充',//通知次要内容,是对通知内容的补充。
                  }
                }
              }
    
              NotificationManager.publish(notificationRequest, (err) => {
                if (err) {
                  console.error(`[ANS] failed to publish, error[${err}]`);
                  return;
                }
                console.info(`[ANS] publish success`);
              });
            })
    
  • 长文本类型通知继承了普通文本类型的字段,同时新增了长文本内容、内容概要和通知展开时的标题,其中长文本内容不超过1024字节,其他字段小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,内容为长文本内容。

 Text("长文本类型通知")
          .fontSize (50)
          .fontWeight(FontWeight.Bold).onClick(()=>{
          let notificationRequest = {
            id: 1,
            content: {
              contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知
              longText: {
                title: '通知标题',//通知标题。
                text: '通知内容',//通知内容。
                additionalText: '通知次要内容,是对通知内容的补充',//通知次要内容,是对通知内容的补充。
                longText: 'test_通知的长文本',//通知的长文本
                briefText: '通知概要内容,是对通知内容的总结',//	通知概要内容,是对通知内容的总结
                expandedTitle: '通知展开时的标题',
              }
            }
          }

          // 发布通知
          NotificationManager.publish(notificationRequest, (err) => {
            if (err) {
              console.error(`[ANS] failed to publish, error[${err}]`);
              return;
            }
            console.info(`[ANS] publish success`);
          });
        })
  • 多行文本类型通知继承了普通文本类型的字段,同时新增了多行文本内容、内容概要和通知展开时的标题,其字段均小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,多行文本内容多行显示。
Text("多行文本类型")
          .fontSize (50)
          .fontWeight(FontWeight.Bold).onClick(()=>{
          let notificationRequest = {
            id: 1,
            content: {
              contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本类型通知
              multiLine: {
                title: '通知标题',//通知标题。
                text: '通知内容',//通知内容。
                briefText: '通知概要内容,是对通知内容的总结',//	通知概要内容,是对通知内容的总结
                longTitle: 'test_longTitle',//通知展开时的标题

                lines: ['line_01', 'line_02', 'line_03', 'line_04'],
              }
            }
          }

          // 发布通知
          NotificationManager.publish(notificationRequest, (err) => {
            if (err) {
              console.error(`[ANS] failed to publish, error[${err}]`);
              return;
            }
            console.info(`[ANS] publish success`);
          });
        })
  • 图片类型通知继承了普通文本类型的字段,同时新增了图片内容、内容概要和通知展开时的标题,图片内容为PixelMap型对象,其大小不能超过2M。

    let notificationPicture: PixelMap = undefined; // 需要获取图片PixelMap信息
    let notificationRequest = {
        id: 1,
        content: {
        contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE,
        picture: {
         title: '通知标题',//通知标题。
          text: '通知内容',//通知内容。
          additionalText: '通知次要内容,是对通知内容的补充',//通知次要内容,是对通知内容的补充。
          longText: 'test_通知的长文本',//通知的长文本
          briefText: '通知概要内容,是对通知内容的总结',//	通知概要内容,是对通知内容的总结
          expandedTitle: '通知展开时的标题',
          picture: notificationPicture//通知的图片内容。
        }
        }
    }
    
    // 发布通知
    NotificationManager.publish(notificationRequest, (err) => {
        if (err) {
        console.error(`[ANS] failed to publish, error[${err}]`);
        return;
        }
        console.info(`[ANS] publish success `);
    });
    

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
2
收藏
回复
举报
回复
    相关推荐