
回复
嗨~我是小L!在鸿蒙开发中,提醒功能就像「贴心小秘书」——既能在后台精准触发通知,又能避免耗电。今天带你解锁代理提醒的核心玩法,让你的应用通知更智能!
类型 | 场景举例 | 核心参数 |
---|---|---|
倒计时提醒 | 会议开始前10分钟提醒 | triggerTimeInSeconds: 600 |
日历提醒 | 每月1号提醒信用卡还款 | dateTime: {month: 1, day: 1} |
闹钟提醒 | 工作日早上7点闹钟 | hour: 7, daysOfWeek: [1,2,3,4,5] |
// config.json
{
"reqPermissions": [
{ "name": "ohos.permission.PUBLISH_AGENT_REMINDER" }
]
}
注意:需邮件向华为申请正式权限(测试阶段可用临时权限)
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' // 通知渠道类型
};
// 发布提醒
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 |
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('通知渠道创建成功');
});
// 添加「立即处理」和「稍后提醒」按钮
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小时
}
];
// 设置过期内容(未触发的提醒显示)
const reminder = {
...baseReminder,
expiredContent: '您的会议提醒已过期,可查看历史记录',
// 过期后自动跳转至历史记录页面
expiredWant: {
bundleName: 'com.example.app',
abilityName: 'ReminderHistoryAbility'
}
};
hwpush@huawei.com
,主题:【代理提醒权限申请】应用名称-包名
reminderType: 'ALARM',
hour: 19,
minute: 0,
daysOfWeek: [1,3,5], // 周一、三、五(1代表周一)
snoozeTimes: 2, // 最多延后2次
timeInterval: 3600, // 每次延后1小时
...commonReminderConfig
const preReminder: ReminderRequestTimer = {
reminderType: 'TIMER',
triggerTimeInSeconds: 1800, // 30分钟
linkedReminderId: alarmId, // 关联闹钟提醒ID
...commonReminderConfig
};
scheduleReminder(preReminder);