嗨~我是小L!在鸿蒙开发中,提醒功能就像「贴心小秘书」------既能在后台精准触发通知,又能避免耗电。今天带你解锁代理提醒的核心玩法,让你的应用通知更智能!
一、代理提醒:后台通知的「守护者」🔒
核心优势
- 进程无关:即使应用被杀,系统也会按时触发提醒
- 低耗高效:由系统统一调度,避免应用常驻后台
- 场景丰富:支持倒计时、日历、闹钟三种类型
典型应用场景
类型 | 场景举例 | 核心参数 |
---|---|---|
倒计时提醒 | 会议开始前10分钟提醒 | triggerTimeInSeconds: 600 |
日历提醒 | 每月1号提醒信用卡还款 | dateTime: {month: 1, day: 1} |
闹钟提醒 | 工作日早上7点闹钟 | hour: 7, daysOfWeek: [1,2,3,4,5] |
二、开发三步骤:从权限到发布🚀
1. 申请权限(关键第一步)
json
// config.json
{
"reqPermissions": [
{ "name": "ohos.permission.PUBLISH_AGENT_REMINDER" }
]
}
注意:需邮件向华为申请正式权限(测试阶段可用临时权限)
2. 定义提醒内容(以日历提醒为例)
typescript
import { ReminderType, ReminderRequestCalendar } from '@ohos.reminderAgentManager';
const birthdayReminder: ReminderRequestCalendar = {
reminderType: ReminderType.REMINDER_TYPE_CALENDAR,
dateTime: {
year: 2024,
month: 5,
day: 20,
hour: 9,
minute: 0
},
repeatMonths: [5], // 每年5月重复
actionButtons: [
{ title: '查看礼物', type: 'BUTTON_TYPE_ACTION' },
{ title: '延后提醒', type: 'BUTTON_TYPE_SNOOZE' }
],
title: '好友生日提醒',
content: '今天是小明的生日,记得送祝福~',
notificationId: 1001, // 唯一通知ID
slotType: 'SOCIAL_COMMUNICATION' // 通知渠道类型
};
3. 发布与管理提醒
typescript
// 发布提醒
function scheduleReminder(reminder: ReminderRequestBase) {
reminderAgentManager.publishReminder(reminder).then(reminderId => {
console.log(`提醒已发布,ID:${reminderId}`);
saveReminderId(reminderId); // 本地存储ID以便后续管理
});
}
// 取消提醒
function cancelReminder(reminderId: number) {
reminderAgentManager.cancelReminder(reminderId).then(() => {
console.log('提醒已取消');
});
}
三、三种提醒类型对比表📊
维度 | 倒计时提醒 | 日历提醒 | 闹钟提醒 |
---|---|---|---|
触发方式 | 相对时间(秒) | 绝对日期时间 | 每日固定时间 |
重复支持 | 不支持 | 按日/月重复 | 按周重复 |
典型场景 | 考试倒计时、烹饪计时 | 会议预约、节日提醒 | 起床闹钟、吃药提醒 |
核心参数 | triggerTimeInSeconds |
dateTime /repeatMonths |
hour /daysOfWeek |
四、通知优化:让提醒更「顺眼」👀
1. 自定义通知渠道(NotificationSlot)
typescript
import { NotificationSlot, SlotType, Importance } from '@ohos.notificationManager';
const reminderSlot: NotificationSlot = {
slotId: 'reminder_channel',
slotType: SlotType.SYSTEM_PROMPT,
name: '重要提醒',
importance: Importance.HIGH, // 高优先级(弹窗提醒)
description: '用于显示关键业务提醒',
enableVibration: true,
ledColor: '#FF0000' // 呼吸灯红色
};
// 创建渠道
notificationManager.addNotificationSlot(reminderSlot).then(() => {
console.log('通知渠道创建成功');
});
2. 智能交互按钮
typescript
// 添加「立即处理」和「稍后提醒」按钮
const actionButtons = [
{
title: '立即处理',
type: 'BUTTON_TYPE_ACTION',
want: { // 点击按钮跳转的目标
bundleName: 'com.example.app',
abilityName: 'TaskDetailAbility',
parameters: { taskId: '123' }
}
},
{
title: '1小时后提醒',
type: 'BUTTON_TYPE_SNOOZE',
snoozeTime: 3600 // 延时1小时
}
];
3. 过期提醒处理
typescript
// 设置过期内容(未触发的提醒显示)
const reminder = {
...baseReminder,
expiredContent: '您的会议提醒已过期,可查看历史记录',
// 过期后自动跳转至历史记录页面
expiredWant: {
bundleName: 'com.example.app',
abilityName: 'ReminderHistoryAbility'
}
};
五、权限申请与合规要点⚠️
1. 官方申请流程
- 邮件至
[email protected]
,主题:【代理提醒权限申请】应用名称-包名
- 正文需包含:
- 应用场景(如「医疗类App用药提醒」)
- 通知频率(如「每日最多3次」)
- 通知内容示例(如「您的体检报告已生成」)
2. 用户隐私保护
- 禁止推送与应用功能无关的通知(如广告)
- 提供一键关闭提醒的入口
- 敏感信息加密传输(如医疗提醒中的病历号)
六、实战场景:健身App的智能提醒方案🏋️
场景描述
- 用户设定每周一、三、五19:00健身提醒
- 倒计时30分钟时提示准备运动装备
- 提醒未响应时,1小时后自动延后
实现逻辑
-
闹钟提醒:
typescriptconst workoutAlarm: ReminderRequestAlarm = { reminderType: 'ALARM', hour: 19, minute: 0, daysOfWeek: [1,3,5], // 周一、三、五(1代表周一) snoozeTimes: 2, // 最多延后2次 timeInterval: 3600, // 每次延后1小时 ...commonReminderConfig };
-
倒计时提醒:
typescript// 在闹钟触发前30分钟自动生成倒计时 function addPreReminder(alarmId: number) { const preReminder: ReminderRequestTimer = { reminderType: 'TIMER', triggerTimeInSeconds: 1800, // 30分钟 linkedReminderId: alarmId, // 关联闹钟提醒ID ...commonReminderConfig }; scheduleReminder(preReminder); }
总结:提醒设计「四要素」
- 时机精准:用倒计时/日历/闹钟匹配场景时间特性
- 交互友好:提供明确操作按钮,减少用户决策成本
- 视觉分层:通过通知渠道设置区分重要程度
- 合规安全:申请权限+保护隐私,避免用户反感