当前位置: 首页 > news >正文

Harmony OS 用户通知服务

用户通知服务

简介

  • 将应用产生的通知直接在客户端本地推送给用户,本地通知根据通知类型及发布场景会产生对应的铃声、震动、横幅、锁屏、息屏、通知栏提醒和显示。

能力

  • 文本通知
    • 纯文本通知( 短文本类型(单行文本), 长文本类型(多行文本) )
    • 图文通知
  • 进度条通知
  • 特殊的通知( 角标 )
  • 过程
    • 当前用用需要获取用户授权, 才能发送通知
    • 授权成功才可以正常发送通知
    • 给了我们几个 API
      => 查看是否有授权的 API, isNotificationEnabled()
      => 发送通知的方法 requestEnableNotification()
      -> 向用户请求发送通知, 第一次请求的时候会弹窗

做消息通知之前首先要了解一下通知类型和通道类型(通知方式:app小圆点、状态栏图标、横幅、提示音)

1.通知类型

  • 实际上就是设置通知卡片的类型
  • 设置手机下拉任务栏界面,通知卡片的样式和内容会有所不同
ContentType说明
NOTIFICATION_CONTENT_BASIC_TEXT0普通类型通知
NOTIFICATION_CONTENT_LONG_TEXT1长文本类型通知
NOTIFICATION_CONTENT_PICTURE2图片类型通知
NOTIFICATION_CONTENT_CONVERSATION3社交类型通知。预留能力,暂不支持
NOTIFICATION_CONTENT_MULTILINE4多行文本
NOTIFICATION_CONTENT_SYSTEM_LIVE_VIEW5实况窗类型通知。不支持三方应用直接创建该类型通知,可以由系统代理创建系统实况窗类型通知后,三方应用发布同ID的通知来更新指定内容。
NOTIFICATION_CONTENT_LIVE_VIEW6普通实况窗类型通知。只支持系统应用

2.通道类型(通知方式:app小圆点、状态栏图标、横幅、提示音)

  • 加*的为常用类型
SlotTypeSlotTypeValSlotType说明SlotLevel
UNKNOWN_TYPE0未知类型LEVEL_MIN
SOCIAL_COMMUNICATION*1社交通信LEVEL_HIGH
SERVICE_INFORMATION*2服务提醒LEVEL_DEFAULT
CONTENT_INFORMATION*3内容资讯LEVEL_MIN
LIVE_VIEW4实况窗,不支持三方应用直接创建该渠道类型通知,可以由系统代理创建后,三方应用发布同ID的通知来更新指定内容。LEVEL_DEFAULT
CUSTOMER_SERVICE5客服消息。该类型用于用户与商家之间的客服消息,需由用户主动发起。LEVEL_LOW
OTHER_TYPES*0xFFFF其他LEVEL_MIN
slotLevel:通知优先级,优先级越高
SlotLevelSlotLevelValSlotLevel说明
LEVEL_NONE0表示关闭通知功能
LEVEL_MIN11.状态栏中不显示通知图标 2.没有横幅 3.没有提示音
LEVEL_LOW21.状态栏中显示通知图标 2.没有横幅 3.没有提示音
LEVEL_DEFAULT31.状态栏中显示通知图标 2.没有横幅 3.有提示音
LEVEL_HIGH41.状态栏中显示通知图标 2.有横幅 3.有提示音

3.请求通知授权

  • 1.通过固定api(notificationManager.isNotificationEnabled)查询是否已授权
  • 2.若未授权,通过固定api(notificationManager.requestEnableNotification)请求用户授权
  • 3.授权成功后,才能发送通知
// 导入依赖 
import { abilityAccessCtrl, common } from '@kit.AbilityKit';// 定义一个方法
isEnabled(callback:()=>void){// 调用api 查询是否已授权notificationManager.isNotificationEnabled().then((res)=>{console.log('用户授权 => ',JSON.stringify(res));if(!res){// 没有授权,调用api 请求用户授权notificationManager.requestEnableNotification(this.context).then(()=>{console.log('发送通知1 => ');callback()}).catch(()=>{console.log('不允许发送通知 => ');const temp = abilityAccessCtrl.createAtManager()temp.requestPermissionsFromUser(this.context, ['ohos.permission.NOTIFICATION_CONTROLLER'])})} else {// 已授权console.log('发送通知2 => ');callback()}}).catch(()=>{console.log('=> 查询失败')})}

4.发送通知–在获取权限的情况下

  • 1.导入模块
  import { notificationManager } from '@kit.NotificationKit';
  • 2.首先创建 NotificationRequest 对象, 官网文档

  • 文本通知

    • => 通知类型根据实际业务改变 notificationContentType
    • => 通知方式根据实际业务改变notificationSlotType
    • => 根据实际业务设置content中文本
      • 当前通知配置( 不同类型对应的 key 不一样 )
      • 普通文本 => normal
      • 长文本 => longText
      • 多行文本 => multiLine
const notificationInfo: notificationManager.NotificationRequest = {// id 必填: 表示当前通知的序号( 如果一样, 替换当前, 如果不一样, 就增加一个 )id: ++this.count,// 当前通知内容content: {// 当前通知类型notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {text: '通知的内容' + this.count,title: '通知的标题' + this.count,}},// 通知的类型notificationSlotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,// 通知的小分组groupName: 'Aaa'
}
  • 3.发送通知
 notificationManager.publish(notificationInfo)

5.进度条通知

  • 进度条通知需要一个模板
  • 其他方式都和普通通知一样
// 进度
sendSchedule(){// 创建一个变量缓存进度this.downloadCount += 1//   0.创建模板const template:notificationManager.NotificationTemplate = {name: 'downloadTemplate', data:{title: '下载内容',    // 标题fileName: '下载完成', // 文本内容progressValue: this.downloadCount * 10,    // 当前进度progressMaxValue: 100, // 最大值}}// 1. 准备通知对应的信息对象const notificationInfo:notificationManager.NotificationRequest = {// 做进度通知,这个id需要写死,这样更新进度就会覆盖掉之前的通知id:this.count,content:{notificationContentType:notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {text: '正在下载文件',title: '下载文件',// additionalText:  80 + '%'}},template,// 通知的类型}// 2. 把通知发送出去( 按说应该是根据某些逻辑发送通知 )notificationManager.publish(notificationInfo, (err) => {// 当完成的时候, 会触发当前回调函数// 如果有错误, err 有内容// 如果没有错误, 那么 err 没有内容console.log('wuwuwu => 通知发送成功')})
}

6.点击通知调起ability

  • 首先需要创建want对象
  • 然后就还是正常发通知的步骤
// 案例使用 长文本通知// 拉起ability
pullUpAbility() {// 1.创建一个 want 信息 对象const wantAgentInfo: wantAgent.WantAgentInfo = {wants: [{bundleName: 'com.example.testnitification',abilityName: 'EntryAbility',parameters: {  // 在 EntryAbility 的 want 中解析参数txt: 'aaasssaa'}}],operationType: wantAgent.OperationType.START_ABILITY,requestCode: 0,wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG]}// 2.创建 WantAgentwantAgent.getWantAgent(wantAgentInfo, (err, data) => {if (err) {console.log('wuwuwu 创建 WantAgent 出错 =>');return}//   3.准备通知对应的信息对象const notificationInfo: notificationManager.NotificationRequest = {id: ++this.count,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT,longText: {title: '长文本title',text: '长文本text',briefText: '长文本briefText',longText: 'longText',expandedTitle: 'expandedTitle'}},notificationSlotType: notificationManager.SlotType.CUSTOMER_SERVICE,wantAgent: data}//   4.发送通知notificationManager.publish(notificationInfo, () => {console.log('wuwuwu 发送通知 => ');})})
}// 解析参数---EntryAbility中生命周期
// 参数都存在 want.parameters 中
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');if (want?.parameters) {console.log('wuwuwu onCreate => ', JSON.stringify(want.parameters));}
}onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {if (want?.parameters) {console.log('wuwuwu onNewWant => ', JSON.stringify(want.parameters));}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第三章 LVS+Keepalived群集
  • C++转Java基础知识
  • Python学习笔记50:游戏篇之外星人入侵(十一)
  • RUM技术探索:前端监控数据采集与实践
  • CRITIC权重法
  • c++STL中list介绍,模拟实现和list与vector对比
  • 申请专利需要准备哪些材料?
  • 在Ubuntu 16.04上安装Docker Compose的方法
  • vue的nextTick是下一次事件循环吗
  • 新华三H3CNE网络工程师认证—路由基础
  • springboot+vue+mybatis汽车租赁管理+PPT+论文+讲解+售后
  • AI与PS:技术革命下的设计工具比较
  • 数学建模之数据分析【二】:什么是数据?
  • C语言中整数类型及其类型转换
  • 用Java手写jvm之模拟方法调用指令invokexxx和方法返回指令xreturn
  • 03Go 类型总结
  • 2017届校招提前批面试回顾
  • 78. Subsets
  • Docker入门(二) - Dockerfile
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • flutter的key在widget list的作用以及必要性
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS实现简单的MVC模式开发小游戏
  • NSTimer学习笔记
  • Quartz初级教程
  • use Google search engine
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 数据仓库的几种建模方法
  • 思考 CSS 架构
  • 微服务核心架构梳理
  • 我有几个粽子,和一个故事
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 找一份好的前端工作,起点很重要
  • UI设计初学者应该如何入门?
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 安徽锐锋科技IDMS系统简介
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #php的pecl工具#
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)无线电失控保护(二)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (南京观海微电子)——示波器使用介绍
  • (七)Flink Watermark
  • .Net OpenCVSharp生成灰度图和二值图
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • @Autowired @Resource @Qualifier的区别
  • @ConfigurationProperties注解对数据的自动封装
  • @SpringBootApplication 注解
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [Angularjs]asp.net mvc+angularjs+web api单页应用