004 鸿蒙应用开发-通知栏

news2024/11/19 10:46:20

目录

一.通知概述

通知简介

通知业务流程

广播的类型

接口说明

开发前期准备

二.发送普通文本类型通知

1.先初始化广播的请求request

2.然后发送广播

3.显示效果如下

三.发送长文本类型广播

1.构建发送广播的参数request

2.然后发送广播

3.显示效果如下

注意事项

四.发送多行文本类型广播

1.构建发送广播的参数request

2.发送广播

3.显示效果

注意事项

五.发送图片类型广播

代码

显示效果

六.发送意图类型广播

1.创建wantAgent字段

2.构建发送广播的参数request

3.发送广播

4.显示结果


一.通知概述

通知简介

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

通知常见的使用场景:

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

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

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

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

通知业务流程

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

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

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

广播的类型

  • 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;

取消所有该应用发布的通知。

开发前期准备

导包

import NotificationManager from '@ohos.notificationManager';

二.发送普通文本类型通知

1.先初始化广播的请求request

let notificationRequest = {

  id: 1,

  content: {

    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知

    normal: {

      title: 'test_title'//标题,必选项

      text: 'test_text'//内容,必选项

      additionalText: 'test_additionalText'//附加信息,非必选

    }

  }

}

2.然后发送广播

@Entry

@Component

struct Index {

  build() {

    Row() {

      Column() {

        Button("发送普通Notification").onClick(_ => {

          NotificationManager.publish(notificationRequest, (err) => {

            if (err) {

              console.error(`[ANS] failed to publish, error[${err}]`);

              return;

            }

            console.info(`[ANS] publish success`);

          });

        }).margin({ bottom: 20 })

      }.alignItems(HorizontalAlign.Start).padding(20)

      .width('100%')

    }.alignItems(VerticalAlign.Top)

    .height('100%')

  }

}

3.显示效果如下

点击发送普通广播按钮后下拉通知栏

三.发送长文本类型广播

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

1.构建发送广播的参数request

let notificationRequestLong = {

  id: 2,

  content: {

    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知

    longText: {

      title: 'test_title',

      text: 'test_text',

      additionalText: 'test_additionalText',

      longText: 'test_longTextssssssssssssssssssssssssssssssssssssss',

      briefText: 'test_briefText',

      expandedTitle: 'test_expandedTitle',

    }

  }

}

2.然后发送广播

@Entry

@Component

struct Index {

  build() {

    Row() {

      Column() {

        Button("发送长文本Notification").onClick(_ => {

          NotificationManager.publish(notificationRequestLong, (err) => {

            if (err) {

              console.error(`[ANS] failed to publish, error[${err}]`);

              return;

            }

            console.info(`[ANS] publish success`);

          });

        }).margin({ bottom: 20 })

      }.alignItems(HorizontalAlign.Start).padding(20)

      .width('100%')

    }.alignItems(VerticalAlign.Top)

    .height('100%')

  }

}

3.显示效果如下

点击按钮后然后下拉通知栏显示效果

注意事项

  • 目前测试发现长文本要足够长,如果不够长则只会显示出长文本内容,普通文本内容显示不出来

四.发送多行文本类型广播

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

1.构建发送广播的参数request

let notificationRequestLines = {

  id: 3,

  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'],

    }

  }

}

2.发送广播

@Entry

@Component

struct Index {

  build() {

    Row() {

      Column() {

        Button("发送多行Notification").onClick(_ => {

          NotificationManager.publish(notificationRequestLines, (err) => {

            if (err) {

              console.error(`[ANS] failed to publish, error[${err}]`);

              return;

            }

            console.info(`[ANS] publish success`);

          });

        }).margin({ bottom: 20 })

      }.alignItems(HorizontalAlign.Start).padding(20)

      .width('100%')

    }.alignItems(VerticalAlign.Top)

    .height('100%')

  }

}

3.显示效果

点击后下拉通知栏

注意事项

  • 如果文本只有一行,会只显示出多行文本类型的内容,不显示普通文本类型的内容

五.发送图片类型广播

图片类型通知继承了普通文本类型的字段,同时新增了图片内容、内容概要和通知展开时的标题,图片内容为PixelMap型对象,其大小不能超过2M。

代码

@Entry

@Component

struct Index {

  build() {

    Row() {

      Column() {

        Button("发送Image Notification").onClick(_ => {

          // 图片构造

          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:image.PixelMapFormat.RGBA_8888,size: {height:100, width : 150}};

          image

            .createPixelMap(color, opts)

            .then( value => {

              value.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: NotificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE,

                  picture: {

                    title: 'test_title',

                    text: 'test_text',

                    additionalText: 'test_additionalText',

                    picture: value,

                    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;

            })

        }).margin({ bottom: 20 })

      }.alignItems(HorizontalAlign.Start).padding(20)

      .width('100%')

    }.alignItems(VerticalAlign.Top)

    .height('100%')

  }

}

显示效果

点击按钮后下拉通知栏显示

六.发送意图类型广播

意图类型的广播就是发送后可以点击并跳转到页面的广播,意图类型通知继承了普通文本类型的字段,同时新增了wantAgent字段,此参数的跳转到哪个页面的意思

1.创建wantAgent字段

// 通过WantAgentInfo的operationType设置动作类型。

let wantAgentInfoDisplay = {

  wants: [

      {

        deviceId: '',

        bundleName: 'com.example.notificationtest',

        abilityName: 'MainAbility'

      }

  ],

  operationType: wantAgent.OperationType.START_ABILITY,

  requestCode: 0,

  wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG]

}

@Entry

@Component

struct NotificationWantAgent {

  @State message: string = 'Hello World'

  build() {

    Row() {

      Column() {

        Button("意图通知").onClick(_ => {

          // 创建WantAgent

          wantAgent.getWantAgent(wantAgentInfoDisplay, (err, data) => {

            if (err) {

              console.error('[WantAgent]getWantAgent err=' + JSON.stringify(err));

            else {

              console.info('[WantAgent]getWantAgent success');

            }

          });

        })

      }.padding(20).alignItems(HorizontalAlign.Start)

      .width('100%')

    }

    .height('100%').alignItems(VerticalAlign.Top)

  }

}

如上得到的data就是wantAgent参数

2.构建发送广播的参数request

let notificationRequest = {

                content: {

                  contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,

                  normal: {

                    title: 'Test_Title',

                    text: 'Test_Text',

                    additionalText: 'Test_AdditionalText',

                  },

                },

                id: 6,

                label: 'TEST',

                wantAgent: data,

              }

3.发送广播

// 通知发送

NotificationManager.publish(notificationRequest, (err) => {

    if (err) {

        console.error(`[ANS] failed to publish, error[${err}]`);

        return;

    }

    console.info(`[ANS] publish success `);

});

4.显示结果

点击后下拉通知栏点击通知栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用ArcGIS软件赋予tif影像空间参考坐标系

问题&#xff1a; 在处理数据时有一幅没有任何空间参考坐标信息的tif影像&#xff0c;实质上为一个照片。现在需要将其与一个有空间地理参考坐标信息的shp文件叠加在一起。如何解决这个问题呢&#xff1f; 已知信息&#xff1a; shp文件的空间地理参考 shp文件的边界与tif影像的…

CV中的注意力机制

注意力机制 计算机视觉中的注意力机制的基本思想 就是想让系统学会注意力 &#xff0c;能够忽略无关信息&#xff0c;关注重点信息。 1. 硬注意力机制&#xff08;Hard/Local Attention&#xff09; 对每个输入项分配的权重非0即1&#xff0c;和软注意不同&#xff0c;硬注…

Sentence Bert 阅读笔记

Sentence Bert 阅读笔记 论文 https://arxiv.org/abs/1908.10084 Supervised / Unsupervised / Semi-supervised 从训练上看&#xff0c;是 Supervised / Unsupervised 两种结合 Model Structure 本文提出了两个architecture&#xff0c;一个用于文本的分类&#xff0c;一…

【Python基础绘图】自定义函数,一键标注相关性热力图的显著性

相关性热力图标自动注显著性 01 引言 很早之前其实就写过一篇博客【python相关性热力图自动标记显著性】介绍如何在相关性热力图上自动标注显著性&#xff0c;不过收到好多同学私信问我数据源是啥样的&#xff0c;怎么计算的啊等等问题。所以今天打算重新写篇&#xff0c;并附…

【github开源】Linux iptables 界面化 分布式 管理平台 go vue,底座firewalld

快速部署&#xff1a;Uranus 目前最优的firewalld前端 如果你觉得项目符合你的使用场景, 劳烦大佬点个 &#x1f31f;&#x1f31f;&#x1f31f; 吧!!! 好人一生平安!!! Uranus Gateway Uranus使命是将iptables转化为类安全组功能的一个工具 Uranus Gateway 是一个分布式管…

Android Studio添加EasyPemissions

问题描述 按照EasyPermissions主页描述的那样添加完依赖后&#xff0c; 在程序中使用还是报错&#xff1a; Failed to resolve: pub.devrel:easypermissions:0.3.0 解决方法 首先&#xff0c;EasyPemissions属于别人的开源库&#xff0c;我们想使用的话&#xff0c;必须让…

RHCE(shell第二次)

1.编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 创建脚本for1 [rootserver ~]# vim xixi.sh 测试 2.编写脚本for2.sh,使用for循环,通过ping命令测…

中创AI|政治、工作、娱乐,ChatGPT正逐步影响我们的社会生产生活!

“作为政策官员&#xff0c;我们所做的一切&#xff0c;无论是编写会议记录还是批准预算文件&#xff0c;只是为了调动资源来解决一个常见问题。一旦我们从这个角度看待自己&#xff0c;ChatGPT就会成为推动者&#xff0c;而不是破坏者。” ——新加坡政府官员 ChatGPT可被广…

LC-1105. 填充书架(记忆化搜索 ==> 动态规划)

1105. 填充书架 难度中等169 给定一个数组 books &#xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架上&#xff08;它们的厚度之和…

ajax写法和json的知识点

1. JQuery方式来实现AJAX 1.1 $.ajax()方式来实现AJAX 语法&#xff1a;$.ajax(url,[settings]);但是我们一般这么写$.ajax({键值对});。 $.ajax()来实现ajax的案例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"…

consul集群搭建教程 - 多机集群

简言 1. 使用consul单节点有宕机&#xff0c;数据丢失的风险&#xff0c;为了安全&#xff0c;使用consul集群更靠谱 2. consul的各个版本下载地址在 Consul Versions | HashiCorp Releases 3. 本文使用consul的版本是consul1.15.1&#xff0c;所以请下载名字为 consul_1.15…

GitHub开源神器,已获3k star!让你的 ChatGPT 不再报错!感受丝滑般体验!

点击上方“Github爱好者社区”&#xff0c;选择星标 回复“资料”&#xff0c;获取小编整理的一份资料 作者&#xff1a;GG哥 来源&#xff1a;GitHub爱好者社区&#xff08;github_shequ&#xff09; 这是GitHub爱好者社区第 71 篇原创文章 Hello&#xff0c;大家好&#xff0…

基于springboot的大学生租房系统源码论文数据库

3.1系统功能 现在无论是在PC上还是在手机上&#xff0c;相信全国所有地方都在进行大学生租房管理。随着经济的不断发展&#xff0c;系统管理也在不断增多&#xff0c;大学生租房系统就是其中一种&#xff0c;很多人会登录到相关的租房系统查看租房信息&#xff0c;还能查看房屋…

高效提升电池寿命和安全性 | 基于ACM32 MCU的BMS应用方案

电池管理系统&#xff08;BMS&#xff09;通过监控电池的状态&#xff0c;智能化管理及维护各个电池单元&#xff0c;从而防止电池出现过充电和过放电。优质的电池管理系统能够最大限度地延长电池整体使用寿命&#xff0c;有效保障设备安全。 BMS电池管理概述 BMS&#xff0c…

Linux使用Jenkins搭配Gitee自动化部署Vue项目

目录 一、环境准备二、Jenkins配置Node2.1 下载NodeJS插件2.2 配置node 三、新建任务-Vue项目四、配置Nginx 一、环境准备 Jenkins&#xff1a; Node&#xff1a;安装配置教程 建三个软链接&#xff0c;不然Jenkins会找不到 ln -s /usr/local/node-v14.18.2-linux-x64/bin/…

CDH 集成 Flink-1.14.3 过程与踩坑记录

一、资源准备与配置 1.1 项目文件下载与配置 #下载 flink-parcel 项目文件 [roothadoop105 ~]# git clone https://github.com/pkeropen/flink-parcel.git [roothadoop105 ~]# cd flink-parcel/ #编辑下载地址&#xff0c;看自己需求哪个版本 [roothadoop105 flink-parcel]# …

【后续】使用nvm替换nvmw作为nodejs的版本切换(亲测)

文接上篇&#xff0c;使用nvm替换nvmw作为nodejs的版本切换&#xff08;亲测&#xff09; 如图各种乱码&#xff0c;在vscoe中也是出现 真的好烦啊。看到提示的还是之前nvmw不能执行的各种报错。 XXX不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 决定&am…

【编译】JITAOT介绍与优劣

文章目录 JIT优劣 AOT优劣 二者区别来源 AOT 去年发布的 .NET 7 中引入了该功能&#xff0c;只是在 .NET 8 中进一步进行了改进。新版本中通过 Native AOT 发布的“Hello, World”应用程序体积进一步缩小&#xff0c;只有 .NET 7 的一半。 以 CoreCLR 为例&#xff0c;不做 AOT…

Linux进程信号(上)

目录 一&#xff1a;信号引入 二&#xff1a;信号保存方式 三&#xff1a;信号处理方式 四&#xff1a;查看Linux信号 五&#xff1a;信号捕捉 六&#xff1a;信号产生 一&#xff1a;终端按键产生信号 二&#xff1a;系统函数产生信号 2.1:kill&#xff08;&#xff…

安全测试:配置管理潜在威胁

一、配置管理威胁有哪些 明文信息传输漏洞敏感信息泄露默认或可猜解用户账户会话重放攻击测试验证码缺陷http方法测试 二、明文信息传输和存储漏洞 漏洞描述&#xff1a; 页面中没有对传输的用户名和密码等敏感信息进行加密后传输。用户密码后台存储是否加密。 产生原因&a…