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系统提醒服务。该服务由系统统一管理和调度,独立于应用生命周期,因此应用进程终止后提醒仍可准时触发。

关键实现步骤如下:

  1. 申请权限:在module.json5配置文件中声明ohos.permission.PUBLISH_AGENT_REMINDER权限。
  2. 创建提醒:使用reminderAgentManager模块的publishReminder方法创建并发布一个提醒。关键是在ReminderRequest对象中设置:
    • reminderType: 设置为ReminderRequest.REMINDER_TYPE_TIMER(定时提醒)或ReminderRequest.REMINDER_TYPE_CALENDAR(日历提醒)。
    • triggerTimeInSeconds: 设置触发时间(自1970年1月1日以来的秒数)。
    • snoozeTimes: 可选,设置重复提醒次数。
    • timeInterval: 可选,设置重复提醒的时间间隔。
    • titlecontent等:设置提醒的显示内容。
  3. 发布提醒:调用publishReminder发布后,系统会接管该提醒。应用退出或进程被杀死,只要系统服务正常运行,提醒就会在指定时间触发。
  4. 处理触发:当提醒触发时,系统会显示通知。如需执行自定义动作(如拉起应用页面),需要在应用入口(如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)设置为未来的时间戳。

通过以上方式,即可实现应用生命周期外的可靠定时提醒。

回到顶部