鸿蒙HarmonyOS开发:用户通知服务Noification的详细使用指南

news2024/9/20 14:50:01

文章目录

      • 一、Notification Kit简介
      • 二、能力范围
      • 三、业务流程
      • 四、通知样式:
      • 五、约束限制
      • 六、开发步骤
        • 6.1、导入模块。
        • 6.2、构造NotificationRequest对象,并发布通知。
          • 6.2.1、普通文本类型。
          • 6.2.2、长文本类型。
          • 6.2.3、多行文本类型。
        • 6.3、为通知添加行为意图

一、Notification Kit简介

Notification Kit(用户通知服务)为开发者提供本地通知发布通道,开发者可借助Notification Kit将应用产生的通知直接在客户端本地推送给用户,本地通知根据通知类型及发布场景会产生对应的铃声、震动、横幅、锁屏、息屏、通知栏提醒和显示。

在这里插入图片描述

二、能力范围

Notification Kit支持的能力主要包括:

  • 发布文本、多行文本、通知大图标等类型通知。
  • 携带或更新应用通知数字角标。
  • 取消曾经发布的某条或全部通知。
  • 查询已发布的通知列表。
  • 查询应用自身通知开关状态。
  • 应用通知用户的能力默认关闭,开发者可拉起授权框,请求用户授权发布通知。

三、业务流程

使用Noification Kit的主要业务流程如下:

  1. 请求通知授权。
  2. 应用发布通知到通知服务。
  3. 将通知展示到通知中心。

四、通知样式:

在这里插入图片描述

五、约束限制

  • 单个应用已发布的通知在通知中心等系统入口的留存数量有限(当前规格最多24条)。
  • 通知的长度不能超过200KB(跨进程序列化大小限制)。
  • 系统所有应用发布新通知的频次累计不能超过每秒10条,更新通知的频次累计不能超过每秒20条。

六、开发步骤

6.1、导入模块。
import notificationManager from '@ohos.notificationManager';
6.2、构造NotificationRequest对象,并发布通知。
6.2.1、普通文本类型。

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

在这里插入代码片
import notificationManager from '@ohos.notificationManager';

@Entry
@Component
struct Notification {
  build() {
    Column() {
      Button("普通文本")
        .onClick(() => {
          let notificationRequest = {
            id: 1,
            content: {
              contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
              normal: {
                title: 'test_title',
                text: 'test_text',
                additionalText: 'test_additionalText',
              },
            },
            deliveryTime: new Date().getTime(),
            showDeliveryTime: true
          }

          notificationManager.publish(notificationRequest, (err) => {
            if (err) {
              console.error(`[ANS] failed to publish, error[${err}]`);
              return;
            }
            console.info(`[ANS] publish success`);
          });
        })
    }
    .width('100%')
    .height('100%')
  }
}
6.2.2、长文本类型。

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

import notificationManager from '@ohos.notificationManager';

@Entry
@Component
struct Notification {
  build() {
    Column() {
      Button("长文本")
        .onClick(() => {
          let notificationRequest = {
            id: 2,
            content: {
              contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知
              longText: {
                title: 'test_title',
                text: 'test_text',
                additionalText: 'test_additionalText',
                longText: 'test_longText test_longText test_longText test_longText test_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`);
          });
        })
    }
    .width('100%')
    .height('100%')
  }
}
6.2.3、多行文本类型。

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

import notificationManager from '@ohos.notificationManager';

@Entry
@Component
struct Notification {
  build() {
    Column() {
      Button("多行文本")
        .onClick(() => {
          let notificationRequest = {
            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'],
              }
            }
          }

          notificationManager.publish(notificationRequest, (err) => {
            if (err) {
              console.error(`[ANS] failed to publish, error[${err}]`);
              return;
            }
            console.info(`[ANS] publish success`);
          });
        })
    }
    .width('100%')
    .height('100%')
  }
}
6.3、为通知添加行为意图

WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。HarmonyOS支持以通知的形式,将WantAgent从发布方传递至接收方,从而在接收方触发WantAgent中指定的意图。例如,在通知消息的发布者发布通知时,通常期望用户可以通过通知栏点击拉起目标应用组件。为了达成这一目标,开发者可以将WantAgent封装至通知消息中,当系统接收到WantAgent后,在用户点击通知栏时触发WantAgent的意图,从而拉起目标应用组件。

import notificationManager from '@ohos.notificationManager';
import wantAgent from '@ohos.app.ability.wantAgent';

@Entry
@Component
struct Notification {
  build() {
    Column() {
      Button("为通知添加行为意图")
        .onClick(async () => {
          // 通过WantAgentInfo的operationType设置动作类型。
          let wantAgentInfo = {
            wants: [
              {
                bundleName: 'com.example.myapplication',
                abilityName: 'EntryAbility',
                parameters: {}
              }
            ],
            operationType: wantAgent.OperationType.START_ABILITY,
            requestCode: 0,
            wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG]
          }
          // 创建WantAgent
          let wantAgentObj = await wantAgent.getWantAgent(wantAgentInfo);

          let notificationRequest = {
            id: 4,
            content: {
              contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
              normal: {
                title: 'test_title4',
                text: 'test_text4',
                additionalText: 'test_additionalText4',
              },
            },
            deliveryTime: new Date().getTime(),
            showDeliveryTime: true,
            wantAgent: wantAgentObj,
          }

          notificationManager.publish(notificationRequest, (err) => {
            if (err) {
              console.error(`[ANS] failed to publish, error[${err}]`);
              return;
            }
            console.info(`[ANS] publish success`);
          });
        })
    }
    .width('100%')
    .height('100%')
  }
}

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

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

相关文章

SpringBoot源码(1)ApplicationContext和BeanFactory

1、调用getBean方法 SpringBootApplication public class SpringBootDemoApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(SpringBootDemoApplication.class, args);applicationContext.get…

javaFx 系统最小化托盘(及其避坑)、开机自启动

1、系统最小化托盘 参考资料: https://blog.51cto.com/u_14191/6310480 javafx 设置最小窗口大小 - Java (1) - 芒果文档 注意事项 1.直接使用第一个参考资料中的MinWindow类即可。 #最小化托盘 -- 一般放置在 start(Stage stage)处 MinWindow.getInstance().…

鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)

cryptocj 库 介绍 cryptocj 是一个安全的密码库,包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法 1 提供SHA、MD5、HMAC摘要算法。 前置条件:NA 场景: OHOS, Linux&#xff…

昇思25天学习打卡营第17天 | CycleGAN图像风格迁移互换

通过深入学习CycleGAN模型,我对无监督图像到图像的转换技术有了更深的理解。CycleGAN不仅能在没有成对训练样本的情况下实现域之间的转换,而且在保持内容结构的同时成功转换图像风格,这在许多应用中都非常有用,如艺术风格转换、季…

C++树(二)【直径,中心】

目录: 树的直径: 树的直径的性质: 性质1:直径的端点一定是叶子节点 性质2:任意点的最长链端点一定是直径端点。 性质3:如果一棵树有多条直径,那么它们必然相交,且有极长连…

Linux搭建Kubernetes集群(单Master)【附图文】

文章目录 一、集群环境配置要求二、主机准备三、初始环境准备1.关闭防火墙2.关闭 selinux3.关闭swap4.加载 br_netfilter 模块5.允许iptables转发流量6.设置时间同步 四、安装Docker五、安装kubeadm, kubectl, kubelet六、在Master节点部署集群七、将 node 节点加入集群八、部署…

springcloud rocketmq 新增的消费者组从哪里开始消费

如果新建一个新的消费者组,是否会消费历史消息,导致重复消费? 直接在 console 界面新增消费者组,但是没有办法绑定订阅关系,没有找到入口,在 控制台项目源码 rocketmq-externals 也没有找到可以确定订阅关系…

Windows 11预览补丁KB5040527影响火绒驱动加载的解决办法

7 月 11 日,微软更新Windows 11 预览版本补丁 KB5040527,补丁安装后会影响火绒驱动加载导致火绒安全软件服务异常,补丁相关信息如下: https://blogs.windows.com/windows-insider/2024/07/11/releasing-windows-11-builds-22621-…

微信视频号下载又一工具,免费简单易用!

Res-downloader嗅探资源下载器请收好 官方称支持微信视频号、抖音、快手、小红书等网络资源下载 使用方法 第一步,下载软件 文末扫码 或者搜索关注公众号AIshape 回复 RES 获取 或 自行百度搜索下载 第二步,软件设置 打开软件会弹出接受传入网络链…

CSI-RS在信道中传输的过程

简单介绍CSI-RS信号生成,在信道中传输和接收的过程 1.载波配置 首先需要配置载波相关的参数 系统带宽和子载波间隔 5G NR中,系统带宽和子载波间隔是两个关键参数,共同决定无线资源的分配和使用 系统带宽 5G NR支持广泛的系统带宽&…

【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权,请联系删除 转自: 简矽芯学堂 简矽芯学堂 2024年01月18日 09:00 陕西 文章目录 OCC 介绍Fast ScanFull chip ATPGPartition ATPGHierarchical ATPG OCC 介绍 OCC&am…

Ubuntu下载jdk:cannot execute binary file

虚拟机上Ubuntu系统安装jdk且配置环境之后,java -version显示cannot execute binary file,多番查阅推测是由于系统和jdk版本不兼容的原因。 uname -m查看系统版本位i686,是32位的,和64位的jdk版本不兼容。因此,下载32位…

QT--进程

一、进程QProcess QProcess 用于启动和控制外部进程,管理其输入输出流。 使用方法 start():启动一个新进程。setStandardInputFile():将文件作为标准输入。将进程的标准输入(stdin)重定向到指定的文件。换句话说&am…

【Linux】从零开始认识多线程 --- 线程互斥

人生有许多事情 正如船后的波纹 总要过后才觉得美的 -- 余光中 线程互斥 1 线程类的封装1.1 框架搭建1.2 线程启动1.3 线程终止1.4 线程等待1.5 运行测试 2 线程互斥2.1 多线程访问的问题2.2 解决办法 --- 锁2.3 从原理角度理解锁 Thanks♪(・ω・)&am…

QT信号和信号槽

信号和信号槽 一.信号与槽1.信号和槽的概述1.2.信号的本质1.3.信号的本质 二.信号和槽的使用2.1 连接信号和槽connect()函数原型:参数的说明 三.自定义信号和槽3.1基本语法1.自定义信号槽的书写规范2、自定义槽函数书写规范3.发送信号 3.2带参数的信号和槽 四.信号与…

Eclipse 搭建 C/C++ 开发环境以及eclipse的使用

一、下载、安装 MinGW 1、下载: 下载地址:MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 下载完成后,得到一个名为 mingw-get-setup.exe 的安装文件。双击运行,安装即可。 …

一套功能齐全、二开友好的即时通讯IM工具,提供能力库和UI库,支持单聊、频道和机器人(附源码)

前言 在当今数字化时代,即时通讯(IM)和实时音视频(RTC)功能已成为众多应用的标配。然而,现有的解-决方案往往存在一些痛点,如架构落后、成本高昂、数据安全性和隐私保护不足,以及二次开发和部署的复杂性。 为了解决这些问题&…

超薄超小单独北斗定位的4G工牌记录仪、4G胸卡记录仪

AIoT万物智联,智能安全帽生产厂家,执法记录仪生产厂家,智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、智能电子工牌、无人机4G补传系统等统一接入大型融合通信可视…

无法继续安装 计算机正忙于安装一个非 Visual Studio 的程序。

解决办法 以管理员身份打开cmd运行窗口,执行以下命令: taskkill -f -im msiexec*

网络三剑客之sed

目录 一、sed是什么 二、sed为什么这样工作(原理) 三、sed命令该怎么操作 3.1 基本的操作选项 3.2 怎么去使用sed 3.3 操作实例 3.3.1 打印输出(-n、-p、-r) 3.3.2 增加内容(i、a) 3.3.3 删除&…