news 2026/7/21 9:42:06

HarmonyOS掌上记账APP开发实践第48篇:notificationManager 通知管理:从本地通知到预算超支提醒

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS掌上记账APP开发实践第48篇:notificationManager 通知管理:从本地通知到预算超支提醒

048 — notificationManager 通知管理:从本地通知到预算超支提醒

简介

通知是应用与用户保持联系的重要方式。在 MoneyTrack 中,通知系统承载着两个关键场景:一是用户设置的每日记账提醒(通过 reminderAgent,见 044 篇),二是预算超支的主动告警。当用户某个月的支出超过预设预算时,通过notificationManager发布系统通知,告知用户超支详情。结合通知渠道(Notification Channel)的划分和提醒设置页的开关控制,用户可以对通知进行精细化管控。

核心知识点

1. NotificationRequest 构建

系统通知通过NotificationRequest对象描述,以下是其核心属性:

属性类型说明
contentNotificationContent通知内容主体(标题、正文、附加文本等)
notificationIdnumber通知唯一标识,用于更新/取消指定通知
slotTypeSlotType通知渠道类型(决定重要等级和提醒方式)
wantAgentWantAgent点击通知后的跳转行为
deliveryTimenumber通知下发时间(毫秒时间戳)
groupNamestring通知分组名称,用于折叠展示
badgeNumbernumber角标数字,显示在应用图标上

2. notificationManager 完整 API

notificationManager提供了通知的完整生命周期管理:

  • 发布通知notificationManager.publish(request)发布一条通知,需要传入 NotificationRequest。
  • 取消通知notificationManager.cancel(notificationId)取消指定 ID 的通知。
  • 取消所有notificationManager.cancelAll()取消当前应用的所有通知。
  • 订阅通知notificationManager.subscribe(subscriber, info)订阅系统通知事件,可监听通知的发布、删除等操作。
  • 取消订阅notificationManager.unsubscribe(subscriber)取消通知订阅。

3. 通知渠道管理

鸿蒙通知系统要求所有通知归属于某个渠道(Slot),渠道定义了通知的语义类别和系统行为。用户可以在系统设置中为每个渠道独立开启/关闭通知,实现精细化控制。

渠道类型说明重要等级
SOCIAL_COMMUNICATION0社交通信类高(响铃+振动)
SERVICE_INFORMATION1服务信息类中(振动)
CONTENT_INFORMATION2内容资讯类低(静音)
LIVE_VIEW3实况通知类高(响铃+振动)
CUSTOMER_SERVICE4客服消息类中(振动)

4. 通知点击跳转

通过设置NotificationRequestwantAgent,用户点击通知时可以跳转到应用内的指定页面。wantAgent支持携带自定义参数,实现精准的页面路由。

5. 通知的完整生命周期

点击通知

滑动清除

系统设置

应用发布通知

系统通知服务

用户是否开启该渠道

系统栏展示通知

静默丢弃

用户操作

通过 wantAgent 跳转
到目标页面

通知消失

进入通知渠道设置页

触发取消回调

解析参数
执行页面路由

项目代码案例

预算超支提醒

import{notificationManager}from'@kit.NotificationKit';import{wantAgent}from'@kit.AbilityKit';exportclassBudgetNotifier{// 发布预算超支通知staticasyncpublishOverBudgetAlert(budget:number,spent:number){constwantAgentObj=awaitwantAgent.getWantAgent({wants:[{bundleName:'com.moneytrack',abilityName:'BillListAbility',parameters:{filter:'current_month',fromNotification:true}}],operationType:wantAgent.OperationType.START_ABILITY});constrequest:notificationManager.NotificationRequest={content:{contentType:notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,text:`本月已支出 ¥${spent},已超预算 ¥${budget}`,title:'预算超支提醒',additionalText:'点击查看本月账单详情'},notificationId:1001,slotType:notificationManager.SlotType.SERVICE_INFORMATION,wantAgent:wantAgentObj,deliveryTime:Date.now(),badgeNumber:1};awaitnotificationManager.publish(request);}// 取消预算超支通知staticasynccancelOverBudgetAlert(){awaitnotificationManager.cancel(1001);}// 订阅通知事件(如统计通知点击率)staticsubscribeNotificationEvents(){constsubscriber={onConsume:(data)=>{console.info(`通知被消费:${JSON.stringify(data.request.content)}`);},onCancel:(data)=>{console.info(`通知被取消:${data.request.notificationId}`);}};notificationManager.subscribe(subscriber);returnsubscriber;// 保留引用以便后续取消订阅}}

提醒设置页控制通知开关

@Componentstruct NotificationSettings{@StorageProp('budgetAlertEnabled')budgetAlertEnabled:boolean=true;build(){Column(){Toggle({type:ToggleType.Switch,isOn:this.budgetAlertEnabled}).onChange((isOn)=>{AppStorage.set('budgetAlertEnabled',isOn);if(!isOn){BudgetNotifier.cancelOverBudgetAlert();}})}}}

通知渠道管理

用户可以通过系统设置 > 应用 > MoneyTrack > 通知管理,对每个通知渠道独立进行开关控制:

  • 服务信息(SERVICE_INFORMATION):管控预算超支等应用服务通知。
  • 社交通信(SOCIAL_COMMUNICATION):管控好友互动等社交类通知。
  • 内容资讯(CONTENT_INFORMATION):管控推荐内容等资讯通知。

开发者需要通过notificationManager.addSlot()在应用启动时注册渠道,用户此后即可在系统设置中操作。

// 应用启动时注册通知渠道asyncfunctioninitNotificationChannels(){awaitnotificationManager.addSlot(notificationManager.SlotType.SERVICE_INFORMATION);awaitnotificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION);}

最佳实践

  1. 合理选择 SlotType:根据通知的紧急程度选择对应的渠道类型,避免过量使用高优先级渠道导致用户关闭所有通知。
  2. 使用唯一 notificationId:为同一类型的通知分配固定 ID,便于后续更新和取消;不同类型的通知使用不同 ID 防止相互覆盖。
  3. 携带 wantAgent 跳转参数:在通知中附带路由参数,用户点击后直接到达目标页面,减少用户的导航层级。
  4. 结合设置开关:在应用内提供通知开关,与系统渠道设置配合,给予用户多重控制能力。
  5. 及时取消无效通知:当触发条件不再满足时(如预算已调整),及时取消对应的通知,避免用户看到过时信息。
  6. 监听通知状态:通过subscribe监听通知的发布和取消事件,用于统计通知触达率和用户行为分析。

提醒设置页提供开关控制用户是否接收预算超支通知,通过约束AppStorage中的配置变量来控制是否调用publishOverBudgetAlert,实现了通知的可控性和灵活性。

推荐参考文档

  • 通知管理指南
  • @kit.NotificationKit API 参考
  • WantAgent API 参考
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 9:36:22

python3从入门到精通(十三): tempfile模块

tempfile模块详解一、基本概念二、常用函数函数常用参数:2.1、TemporaryFile()函数2.2、NamedTemporaryFile()函数2.3、TemporaryDirectory()函数2.4、SpooledTemporaryFile()函数三、低级API3.1、mkstemp()函数3.2、mkdtemp()函数四、全局配置五、案例5.1、生成临时文件供其他…

作者头像 李华
网站建设 2026/7/21 9:35:43

高级爵士舞《Take My Hand》模块化学习与工程化训练指南

在技术领域,命令行界面(CLI)通常与系统管理、开发工具和自动化脚本相关联。然而,将CLI的概念与舞蹈网课相结合,可以引申出一种高效、结构化的学习方式,即通过一系列清晰的指令和步骤来掌握复杂的舞蹈动作。…

作者头像 李华
网站建设 2026/7/21 9:35:26

护脊床垫选购指南:科学支撑脊椎健康

1. 护脊床垫的核心价值解析 脊椎健康问题已经成为现代人最常见的亚健康状态之一。根据临床数据显示,约75%的都市人群存在不同程度的脊椎问题,其中近半数与睡眠姿势不当直接相关。护脊床垫(如昂首床垫)正是针对这一痛点设计的专业寝…

作者头像 李华
网站建设 2026/7/21 9:33:55

Unlock Music Electron:打破音乐枷锁,让加密音频重获自由

Unlock Music Electron:打破音乐枷锁,让加密音频重获自由 【免费下载链接】unlock-music-electron Unlock Music Project - Electron Edition 在Electron构建的桌面应用中解锁各种加密的音乐文件 项目地址: https://gitcode.com/gh_mirrors/un/unlock-…

作者头像 李华