鸿蒙提醒管理:让通知「聪明又贴心」的3个技巧📢

嗨~我是小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. 官方申请流程

  1. 邮件至 hwpush@huawei.com,主题:【代理提醒权限申请】应用名称-包名
  2. 正文需包含:
    • 应用场景(如「医疗类App用药提醒」)
    • 通知频率(如「每日最多3次」)
    • 通知内容示例(如「您的体检报告已生成」)

2. 用户隐私保护

  • 禁止推送与应用功能无关的通知(如广告)
  • 提供一键关闭提醒的入口
  • 敏感信息加密传输(如医疗提醒中的病历号)

六、实战场景:健身App的智能提醒方案🏋️

场景描述

  • 用户设定每周一、三、五19:00健身提醒
  • 倒计时30分钟时提示准备运动装备
  • 提醒未响应时,1小时后自动延后

实现逻辑

  1. 闹钟提醒

    typescript 复制代码
    const workoutAlarm: ReminderRequestAlarm = {  
      reminderType: 'ALARM',  
      hour: 19,  
      minute: 0,  
      daysOfWeek: [1,3,5], // 周一、三、五(1代表周一)  
      snoozeTimes: 2, // 最多延后2次  
      timeInterval: 3600, // 每次延后1小时  
      ...commonReminderConfig  
    };  
  2. 倒计时提醒

    typescript 复制代码
    // 在闹钟触发前30分钟自动生成倒计时  
    function addPreReminder(alarmId: number) {  
      const preReminder: ReminderRequestTimer = {  
        reminderType: 'TIMER',  
        triggerTimeInSeconds: 1800, // 30分钟  
        linkedReminderId: alarmId, // 关联闹钟提醒ID  
        ...commonReminderConfig  
      };  
      scheduleReminder(preReminder);  
    }  

总结:提醒设计「四要素」

  1. 时机精准:用倒计时/日历/闹钟匹配场景时间特性
  2. 交互友好:提供明确操作按钮,减少用户决策成本
  3. 视觉分层:通过通知渠道设置区分重要程度
  4. 合规安全:申请权限+保护隐私,避免用户反感
相关推荐
奕辰杰2 小时前
关于npm前端项目编译时栈溢出 Maximum call stack size exceeded的处理方案
前端·npm·node.js
JiaLin_Denny4 小时前
如何在NPM上发布自己的React组件(包)
前端·react.js·npm·npm包·npm发布组件·npm发布包
路光.5 小时前
触发事件,按钮loading状态,封装hooks
前端·typescript·vue3hooks
我爱996!5 小时前
SpringMVC——响应
java·服务器·前端
咔咔一顿操作6 小时前
Vue 3 入门教程7 - 状态管理工具 Pinia
前端·javascript·vue.js·vue3
kk爱闹6 小时前
用el-table实现的可编辑的动态表格组件
前端·vue.js
漂流瓶jz7 小时前
JavaScript语法树简介:AST/CST/词法/语法分析/ESTree/生成工具
前端·javascript·编译原理
换日线°7 小时前
css 不错的按钮动画
前端·css·微信小程序
风象南7 小时前
前端渲染三国杀:SSR、SPA、SSG
前端
90后的晨仔7 小时前
表单输入绑定详解:Vue 中的 v-model 实践指南
前端·vue.js