HarmonyOS 鸿蒙Next中Reminder Agent系统提醒
HarmonyOS 鸿蒙Next中Reminder Agent系统提醒 如何实现 App 被杀死后仍能触发的定时提醒?(问题来源项目案例整理:https://github.com/heqiyuan35-creator/BaitKnows.git)
3 回复
使用 reminderAgentManager 发布系统级提醒:
import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// 每天 8:30 触发的闹钟提醒
const reminder: reminderAgentManager.ReminderRequestAlarm = {
reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_ALARM,
hour: 8,
minute: 30,
daysOfWeek: [1, 2, 3, 4, 5], // 周一到周五
title: '学习提醒',
content: '该做题了!',
ringDuration: 30,
snoozeTimes: 2,
slotType: 1, // 服务提醒,状态栏显示图标
actionButton: [
{ title: '开始', type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE }
]
};
const reminderId = await reminderAgentManager.publishReminder(reminder);
权限要求:ohos.permission.PUBLISH_AGENT_REMINDER
更多关于HarmonyOS 鸿蒙Next中Reminder Agent系统提醒的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
Reminder Agent是鸿蒙Next中的系统提醒服务,负责管理应用内的定时提醒功能。它基于HarmonyOS的分布式能力,支持跨设备同步提醒。开发者通过ReminderRequest设置提醒参数,由系统统一调度触发。该服务独立运行,不依赖应用进程,确保提醒准时送达。
在HarmonyOS Next中,App被杀死后仍能触发定时提醒,核心是使用Reminder Agent系统提醒服务。该服务由系统统一管理和调度,独立于应用生命周期,因此应用进程终止后提醒仍可准时触发。
关键实现步骤如下:
- 申请权限:在
module.json5配置文件中声明ohos.permission.PUBLISH_AGENT_REMINDER权限。 - 创建提醒:使用
reminderAgentManager模块的publishReminder方法创建并发布一个提醒。关键是在ReminderRequest对象中设置:reminderType: 设置为ReminderRequest.REMINDER_TYPE_TIMER(定时提醒)或ReminderRequest.REMINDER_TYPE_CALENDAR(日历提醒)。triggerTimeInSeconds: 设置触发时间(自1970年1月1日以来的秒数)。snoozeTimes: 可选,设置重复提醒次数。timeInterval: 可选,设置重复提醒的时间间隔。title、content等:设置提醒的显示内容。
- 发布提醒:调用
publishReminder发布后,系统会接管该提醒。应用退出或进程被杀死,只要系统服务正常运行,提醒就会在指定时间触发。 - 处理触发:当提醒触发时,系统会显示通知。如需执行自定义动作(如拉起应用页面),需要在应用入口(如
EntryAbility)的onCreate方法中,通过wantAgent模块处理ACTION_AGENT_REMINDER类型的意图(Intent),解析附加数据(want.parameters)来执行相应逻辑。
代码示例(发布一个10秒后的定时提醒):
import { reminderAgentManager } from '@kit.NotificationAgentKit';
import { ReminderRequest, ReminderRequestAlarm } from '@kit.NotificationAgentKit';
import { BusinessError } from '@kit.BasicServicesKit';
// 1. 创建提醒请求
let reminderReq: ReminderRequest = {
reminderType: ReminderRequest.REMINDER_TYPE_TIMER,
triggerTimeInSeconds: Math.floor(Date.now() / 1000) + 10 // 10秒后触发
};
// 2. 发布提醒
reminderAgentManager.publishReminder(reminderReq).then((reminderId: number) => {
console.info('publishReminder success, reminderId = ' + reminderId);
}).catch((err: BusinessError) => {
console.error('publishReminder failed, code = ' + err.code + ', message = ' + err.message);
});
注意事项:
- Reminder Agent提醒由系统统一管理,应用无法直接控制触发后的具体行为(如播放特定声音),主要依赖系统通知。
- 如需更复杂的后台任务(如网络请求、数据处理),应结合
Background Task Manager(后台任务管理)或WorkScheduler(延迟任务调度)使用。 - 确保触发时间(
triggerTimeInSeconds)设置为未来的时间戳。
通过以上方式,即可实现应用生命周期外的可靠定时提醒。

