写点什么

【中秋国庆不断更】HarmonyOS 对通知类消息的管理与发布通知(上)

  • 2023-10-01
    广东
  • 本文字数:2625 字

    阅读完需:约 9 分钟

【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(上)

一、  通知概述


通知简介

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

通知常见的使用场景:

● 显示接收到的短消息、即时消息等。

● 显示应用的推送消息,如广告、版本更新等。

● 显示当前正在进行的事件,如下载等。

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

通知业务流程

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

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

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



二、  发布基础类型通知


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

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


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

图 1 基础类型通知呈现效果示意图



接口说明

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


开发步骤

1.  导入模块。


import NotificationManager from '@ohos.notificationManager';
复制代码


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

● 普通文本类型通知由标题、文本内容和附加信息三个字段组成,其中标题和文本内容是必填字段。


let notificationRequest = {  id: 1,  content: {    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知    normal: {      title: 'test_title',      text: 'test_text',      additionalText: 'test_additionalText',    }  }}
NotificationManager.publish(notificationRequest, (err) => {    if (err) {        console.error(`[ANS] failed to publish, error[${err}]`);        return;    }    console.info(`[ANS] publish success`);});
复制代码


运行效果如下图所示。



● 长文本类型通知继承了普通文本类型的字段,同时新增了长文本内容、内容概要和通知展开时的标题。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,内容为长文本内容。


let notificationRequest = {  id: 1,  content: {    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知    longText: {      title: 'test_title',      text: 'test_text',      additionalText: 'test_additionalText',      longText: 'test_longText',      briefText: 'test_briefText',      expandedTitle: 'test_expandedTitle',    }  }}
// 发布通知NotificationManager.publish(notificationRequest, (err) => {    if (err) {        console.error(`[ANS] failed to publish, error[${err}]`);        return;    }    console.info(`[ANS] publish success`);});
复制代码


运行效果如下图所示。



● 多行文本类型通知继承了普通文本类型的字段,同时新增了多行文本内容、内容概要和通知展开时的标题。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,多行文本内容多行显示。


let notificationRequest = {  id: 1,  content: {    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本类型通知    multiLine: {      title: 'test_title',      text: 'test_text',      briefText: 'test_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。


// 图片构造const color = new ArrayBuffer(60000);let bufferArr = new Uint8Array(color);for (var i = 0; i<bufferArr.byteLength;i++) {  bufferArr[i++] = 60;  bufferArr[i++] = 20;  bufferArr[i++] = 220;  bufferArr[i] = 100;}let opts = { editable:true, pixelFormat:"ARGB_8888", size: {height:100, width : 150}};await image  .createPixelMap(color, opts)  .then(async (pixelmap) => {    await pixelmap.getImageInfo().then(imageInfo => {      console.log("=====size: ====" + JSON.stringify(imageInfo.size));    }).catch(err => {      console.error("Failed to obtain the image pixel map information." + JSON.stringify(err));      return;    })    let notificationRequest = {      id: 1,      content: {        contentType: notify.ContentType.NOTIFICATION_CONTENT_PICTURE,        picture: {          title: 'test_title',          text: 'test_text',          additionalText: 'test_additionalText',          picture: pixelmap,          briefText: 'test_briefText',          expandedTitle: 'test_expandedTitle',        }      },    }    // 发送通知    NotificationManager.publish(notificationRequest, (err) => {      if (err) {        console.error(`[ANS] failed to publish, error[${err}]`);        return;      }      console.info(`[ANS] publish success `);    });  }).catch(err=>{    console.error('create pixelmap failed =========='+ JSON.stringify(err));    return;  })
复制代码


运行效果如下图所示。



发布于: 刚刚阅读数: 4
用户头像

每一位开发者都是华为要汇聚的星星之火 2021-10-15 加入

提供HarmonyOS关键技术解析、版本更新、开发者实践和活动资讯,欢迎各位开发者加入HarmonyOS生态,一起创造无限可能!

评论

发布
暂无评论
【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(上)_HarmonyOS开发者_InfoQ写作社区