044-reminderAgent代理提醒
044 — reminderAgent 代理提醒定时记账通知的实现方案简介记账应用的核心挑战之一是培养用户的持续记账习惯。MoneyTrack 通过reminderAgent代理提醒能力实现了每日定时记账通知——用户在每天设定的时间收到系统级提醒点击提醒后直接跳转到记账页面。这项能力依赖于PUBLISH_AGENT_REMINDER权限声明和reminderAgentManager的发布/取消接口是提升用户留存率的关键基础设施。reminderAgentManager 完整参数发布代理提醒时reminder 对象支持以下完整参数配置参数类型必填说明reminderTypeReminderType是提醒类型TIMER / ALARM / CALENDARtriggerTimeInSecondsnumber是触发时间距当前秒数TIMER 类型triggerDateTimenumber否触发日期时间戳ALARM/CALENDAR 类型wantAgentWantAgent否点击提醒后跳转的 WantAgenttitlestring是提醒标题contentstring是提醒内容文本ringDurationnumber否响铃时长秒默认 30 秒notificationIdnumber否指定通知 ID用于更新或取消特定通知actionButtonActionButton[]否提醒通知上的操作按钮列表snoozeContentstring否稍后提醒的内容文本snoozeIntervalnumber否稍后提醒的间隔时间分钟maxSnoozeCountnumber否最大稍后提醒次数import{reminderAgentManager}fromkit.ReminderAgentKit;import{wantAgent}fromkit.AbilityKit;asyncfunctionpublishRichReminder(){constwantAgentObjawaitwantAgent.getWantAgent({wants:[{bundleName:com.moneytrack,abilityName:AddBillAbility}],operationType:wantAgent.OperationType.START_ABILITY});constreminder{reminderType:reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER,triggerTimeInSeconds:3600,wantAgent:wantAgentObj,title:记账提醒,content:别忘了记录今天的收支哦,ringDuration:45,notificationId:1001,actionButton:[{title:立即记账,wantAgent:wantAgentObj,type:0},{title:稍后提醒,type:1// 稍后提醒类型}],snoozeContent:已推迟提醒记得记账哦,snoozeInterval:15,maxSnoozeCount:3};constreminderIdawaitreminderAgentManager.publishReminder(reminder);returnreminderId;}提醒类型对比reminderAgentManager 支持三种提醒类型适用于不同场景对比维度REMINDER_TYPE_TIMERREMINDER_TYPE_ALARMREMINDER_TYPE_CALENDAR触发方式倒计时距当前秒数指定时刻日期时间绑定日历事件重复设置不支持自动重复支持每日/每周重复按日历事件规则重复跨天处理自动处理需手动计算时间差自动根据日历处理典型场景倒计时、稍后提醒每日记账提醒、闹钟会议提醒、生日提醒参数关键字段triggerTimeInSecondstriggerDateTimeeventId系统优先级普通较高可响铃中等定时提醒的跨天处理当用户在晚上设置次日早上提醒时triggerTimeInSeconds必须正确跨越零点计算。错误的计算会导致提醒立即触发或永不到期staticgetNextTriggerSeconds(hour:number,minute:number):number{constnownewDate();consttargetnewDate();target.setHours(hour,minute,0,0);letdiffMath.floor((target.getTime()-now.getTime())/1000);// 如果目标时间已过设为次日同一时间if(diff0){target.setDate(target.getDate()1);diffMath.floor((target.getTime()-now.getTime())/1000);}returndiff;}// 每日重复提醒使用 ALARM 类型staticasyncpublishDailyAlarm(hour:number,minute:number){constnownewDate();consttargetnewDate();target.setHours(hour,minute,0,0);// 如果目标已过推到明天if(target.getTime()now.getTime()){target.setDate(target.getDate()1);}constreminder{reminderType:reminderAgentManager.ReminderType.REMINDER_TYPE_ALARM,triggerDateTime:target.getTime(),title:每日记账提醒,content:已到${hour}:${minute}记得记账,ringDuration:30,notificationId:1001};returnawaitreminderAgentManager.publishReminder(reminder);}权限说明发布代理提醒需要声明ohos.permission.PUBLISH_AGENT_REMINDER权限。该权限为 system_basic 级别需在应用市场审核通过后生效。在module.json5中声明{module:{requestPermissions:[{name:ohos.permission.PUBLISH_AGENT_REMINDER,reason:用于发布每日记账提醒,usedScene:{abilities:[AddBillAbility],when:always}}]}}注意事项system_basic 级别权限要求应用通过华为应用市场审核上架后才能获得授权。调试阶段可在设备上通过bm set -signDebugInfo开启调试模式绕过权限校验。此外提醒功能还依赖ohos.permission.NOTIFICATION_CONTROLLER用于发送通知和后台任务权限。提醒生命周期流程目标页面系统通知栏reminderAgentManagerMoneyTrack用户目标页面系统通知栏reminderAgentManagerMoneyTrack用户等待触发可能跨天用户关闭提醒设置每日记账提醒20:00计算 triggerTimeInSecondspublishReminder(reminder)返回 reminderId提示提醒已设置时间到达发送通知显示通知栏提醒点击提醒通知解析 WantAgent启动 Ability打开记账页面关闭每日提醒开关cancelReminder(reminderId)取消成功提示提醒已关闭最佳实践优先使用 ALARM 类型实现每日提醒TIMER 类型每次需要重新计算倒计时而 ALARM 类型支持每日重复更适合每日 X 点提醒的场景。提前检查权限状态在发布提醒前通过reminderAgentManager.checkReminderPermission()检查权限是否已授予。保存 reminderId 用于后续管理发布的提醒返回唯一 ID应存储到本地数据库供取消、更新操作使用。避免重复发布提醒在设置新提醒前先取消之前同类型的提醒防止多条重复提醒同时触发。合理设置 ringDuration响铃时长不宜过短用户可能未及时查看也不宜过长打扰用户建议 30-45 秒。跨天场景充分测试特别关注深夜 23:00 后设置次日提醒的场景确保时间计算正确。项目代码案例文件路径lib_reminder/ReminderUtil.etsimport{reminderAgentManager}fromkit.ReminderAgentKit;import{wantAgent}fromkit.AbilityKit;exportclassReminderUtil{privatestaticsavedReminderId:number-1;staticasyncpublishDailyReminder(hour:number,minute:number){// 先取消已有提醒if(this.savedReminderId0){awaitthis.cancelReminder(this.savedReminderId);}constwantAgentInfo{wants:[{bundleName:com.moneytrack,abilityName:AddBillAbility}],operationType:wantAgent.OperationType.START_ABILITY};constwantAgentObjawaitwantAgent.getWantAgent(wantAgentInfo);constnownewDate();consttargetnewDate();target.setHours(hour,minute,0,0);if(target.getTime()now.getTime()){target.setDate(target.getDate()1);}constreminder{reminderType:reminderAgentManager.ReminderType.REMINDER_TYPE_ALARM,triggerDateTime:target.getTime(),wantAgent:wantAgentObj,title:记账提醒,content:别忘了记录今天的收支哦当前时间${hour}:${String(minute).padStart(2,0)},ringDuration:30,notificationId:1001};this.savedReminderIdawaitreminderAgentManager.publishReminder(reminder);returnthis.savedReminderId;}staticasynccancelReminder(reminderId:number){awaitreminderAgentManager.cancelReminder(reminderId);this.savedReminderId-1;}staticasynccheckPermission():Promiseboolean{returnawaitreminderAgentManager.checkReminderPermission();}}推荐参考文档后台任务与代理提醒指南reminderAgentManager API 参考kit.ReminderAgentKit API 参考

相关新闻

Kotlin核心特性与多平台开发实践指南

Kotlin核心特性与多平台开发实践指南

1. Kotlin语言概述与核心特性 Kotlin是由JetBrains开发的一种现代静态类型编程语言,自2011年首次发布以来,已经成为Android开发的官方首选语言。这门语言的设计哲学可以概括为"简洁、安全、实用"三大原则,它在保留Java虚拟机兼容性…

2026/10/18 3:04:18 阅读更多 →
2016年Android开发工具链与架构演进深度解析

2016年Android开发工具链与架构演进深度解析

1. 2016年Android开发生态全景扫描 2016年是Android开发工具链爆发式增长的关键年份。当时我正在主导一个跨平台电商App的重构工作,深刻感受到整个生态从原始走向成熟的转变过程。那一年Android Studio 2.2正式版发布带来了Instant Run功能,Gradle插件开…

2026/10/18 3:04:29 阅读更多 →
UE5局域网联机“会话找不到”问题:5步排查法详解

UE5局域网联机“会话找不到”问题:5步排查法详解

1. 项目概述:当UE5局域网联机遭遇“会话找不到” 如果你正在用虚幻引擎5(UE5)开发一个支持局域网联机的游戏或应用,那么“会话找不到”这个错误提示,大概率是你开发路上的一块绊脚石。这不仅仅是新手会遇到的问题&…

2026/10/18 3:04:54 阅读更多 →

最新新闻

三相LCL并网逆变器:电容电流反馈+全前馈+谐波抑制全解析

三相LCL并网逆变器:电容电流反馈+全前馈+谐波抑制全解析

1. 项目概述:一个“稳、准、净”的三重挑战做三相LCL并网逆变器控制的同行,看到“电容电流反馈电网电压全前馈5、7、11、13次谐波抑制”这个组合,应该立刻能明白这个项目在干什么:既要解决LCL滤波器带来的谐振稳定性问题&#xff…

2026/10/19 1:27:17 阅读更多 →
C# CAD二次开发圆弧创建实战:避开角度与坐标系陷阱

C# CAD二次开发圆弧创建实战:避开角度与坐标系陷阱

做CAD二次开发这行,最容易被新手高估的就是“画一条圆弧”。很多教程一上来就是new Arc(center, radius, startAngle, endAngle),看着清爽,实际项目里一堆角度、走向、坐标系的坑等着你。这篇文章是“C#/CAD二次开发创建圆弧”系列的第四篇&a…

2026/10/19 1:27:17 阅读更多 →
激光雷达定制化必读:从点云物理本质到感知算法落地

激光雷达定制化必读:从点云物理本质到感知算法落地

聊激光雷达定制化之前,先搞清楚一个问题:你面前坐标系里飘着的几万个三维点,物理本源到底是什么。答案是“光子飞行一段时间后撞到物体再飞回来”这件事,整个LiDAR系统、所有后处理算法、乃至自动驾驶的感知链路,都建立…

2026/10/19 1:27:17 阅读更多 →
STM32+华为云IoT+Qt:智能家居物联网全链路开发实践

STM32+华为云IoT+Qt:智能家居物联网全链路开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:27:17 阅读更多 →
ATECC608A安全引导实战:从信任根建立到固件验签落地

ATECC608A安全引导实战:从信任根建立到固件验签落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:27:17 阅读更多 →
airllm分层加载实战:小显存跑大模型的原理与避坑指南

airllm分层加载实战:小显存跑大模型的原理与避坑指南

1. 当显存告急时,我们还能不能跑大模型第一次看到 airllm 这个项目名的时候,我正被一张 8GB 显存的显卡折磨得够呛。想跑一个 70B 参数级别的模型做本地推理,结果加载权重阶段就直接爆显存,连模型的门都没摸到。相信很多做本地推理…

2026/10/19 1:26:17 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →