一、概述
HarmonyOS提供后台代理提醒功能,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。后台代理提醒就是由系统后台进程代理应用的提醒功能。后台代理提醒服务通过reminderAgentManager模块提供提醒定义、创建提醒、取消提醒等能力。
后台代理提醒业务类型:
- 倒计时类:基于倒计时的提醒功能,适用于短时的计时提醒业务。
- 日历类:基于日历的提醒功能,适用于较长时间的提醒业务。
- 闹钟类:基于时钟的提醒功能,适用于指定时刻的提醒业务。
后台代理提醒服务提供统一的提醒管理能力,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。
以新增一个9点的喝水提醒为例:
在整个流程中,应用仅需:
- 使用reminderAgentManager模块的ReminderRequest类定义提醒实例;
- 使用reminderAgentManager模块的publishReminder接口发布提醒。
无需关注计时和通知发布等功能如何实现。
若是删除提醒流程,需要使用reminderAgentManager模块的cancelReminder接口取消提醒;若是修改提醒流程,则需要先删除旧的提醒,再新增新的提醒。
二、给你的应用添加提醒--前置条件
1、添加后台代理提醒使用权限
"module": {
// ...
"requestPermissions": [
{
"name": "ohos.permission.PUBLISH_AGENT_REMINDER"
}
]
}
2、导入后台代理提醒reminderAgentManager模块
将此模块命名为reminderAgentManager
import { reminderAgentManager } from '@kit.BackgroundTasksKit';
三、给你的应用添加提醒--新增提醒实现
1、用reminderAgent.ReminderRequest类定义提醒实例
import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// ...
export class ReminderService {
public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
let reminder = this.initReminder(alarmItem);
reminderAgentManager.publishReminder(reminder, (err, reminderId) => {
if (callback != null) {
callback(reminderId);
}
});
}
private initReminder(item: ReminderItem): reminderAgentManager.ReminderRequestAlarm {
return {
reminderType: item.remindType,
hour: item.hour,
minute: item.minute,
daysOfWeek: item.repeatDays,
title: item.name,
ringDuration: item.duration * CommonConstants.DEFAULT_TOTAL_MINUTE,
snoozeTimes: item.intervalTimes,
timeInterval: item.intervalMinute * CommonConstants.DEFAULT_TOTAL_MINUTE,
actionButton: [
{
title: '关闭',
type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
},
// ...
],
wantAgent: {
pkgName: CommonConstants.BUNDLE_NAME,
abilityName: CommonConstants.ABILITY_NAME
},
notificationId: item.notificationId,
// ...
}
}
// ...
}
2、发布提醒
import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// ...
export class ReminderService {
public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
let reminder = this.initReminder(alarmItem);
reminderAgentManager.publishReminder(reminder, (err, reminderId) => {
if (callback != null) {
callback(reminderId);
}
});
}
private initReminder(item: ReminderItem): reminderAgentManager.ReminderRequestAlarm {
// ...
}
// ...
}
四、给你的应用添加提醒--删除提醒实现
import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// ...
export class ReminderService {
public deleteReminder(reminderId: number) {
reminderAgentManager.cancelReminder(reminderId);
}
// ...
}
五、给你的应用添加提醒--修改提醒实现
需要先进行旧提醒的删除,再新增新的提醒。
public async setAlarmRemind(alarmItem: AlarmItem) {
let index: number = await this.findAlarmWithId(alarmItem.id);
if (index !== CommonConstants.DEFAULT_NUMBER_NEGATIVE) {
this.reminderService.deleteReminder(alarmItem.id);
} else {
// ...
}
this.reminderService.addReminder(alarmItem, (newId: number) => {
alarmItem.id = newId;
// ...
})
}