当前位置:   article > 正文

<HarmonyOS第一课>给应用添加通知和提醒_给应用添加通知和提醒

给应用添加通知和提醒

简介

随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求,HarmonyOS提供后台代理提醒功能,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。

后台代理提醒业务类型:

  • 倒计时类:基于倒计时的提醒功能,适用于短时的计时提醒业务。
  • 日历类:基于日历的提醒功能,适用于较长时间的提醒业务。
  • 闹钟类:基于时钟的提醒功能,适用于指定时刻的提醒业务。

后台代理提醒就是由系统后台进程代理应用的提醒功能。后台代理提醒服务通过reminderAgentManager模块提供提醒定义、创建提醒、取消提醒等能力。

后台代理提醒服务提供统一的提醒管理能力,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。

以新增一个9点的喝水提醒为例:

假设用户在8点新增这个喝水提醒,应用根据用户设置的信息生成提醒实例并发布提醒。由后台代理提醒服务调用系统服务启动计时。

到9点时,系统唤醒后台代理提醒服务发布通知,最终由通知服务触发桌面显示通知。

在整个流程中,应用仅需:

  1. 使用reminderAgentManager模块的ReminderRequest类定义提醒实例;
  2. 使用reminderAgentManager模块的publishReminder接口发布提醒。

无需关注计时和通知发布等功能如何实现。

若是删除提醒流程,需要使用reminderAgentManager模块的cancelReminder接口取消提醒;若是修改提醒流程,则需要先删除旧的提醒,再新增新的提醒。

给你的应用添加提醒

以闹钟应用为例,实现提醒功能有以下前置条件:

  • 添加后台代理提醒使用权限。
     
      
    1. "module": {
    2. ...
    3. "requestPermissions": [
    4. {
    5. "name": "ohos.permission.PUBLISH_AGENT_REMINDER"
    6. }
    7. ]
    8. }
  • 导入后台代理提醒reminderAgentManager模块,将此模块命名为reminderAgent。
     
      
    1. import reminderAgent from '@ohos.reminderAgentManager';

如果是新增提醒,实现步骤如下:

  1. 用reminderAgent.ReminderRequest类定义提醒实例。

     
      
    1. import reminderAgent from '@ohos.reminderAgentManager';
    2. ...
    3. export class ReminderService {
    4. public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
    5. let reminder = this.initReminder(alarmItem);
    6. reminderAgent.publishReminder(reminder, (err, reminderId) => {
    7. if (callback != null) {
    8. callback(reminderId);
    9. }
    10. });
    11. }
    12. private initReminder(item: ReminderItem): reminderAgent.ReminderRequestAlarm {
    13. return {
    14. reminderType: item.remindType,
    15. hour: item.hour,
    16. minute: item.minute,
    17. daysOfWeek: item.repeatDays,
    18. title: item.name,
    19. ringDuration: item.duration * Constants.DEFAULT_TOTAL_MINUTE,
    20. snoozeTimes: item.intervalTimes,
    21. timeInterval: item.intervalMinute,
    22. actionButton: [
    23. {
    24. title: '关闭',
    25. type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
    26. },
    27. ...
    28. ],
    29. wantAgent: {
    30. pkgName: globalThis.bundleName,
    31. abilityName: globalThis.abilityName
    32. },
    33. notificationId: item.notificationId,
    34. ...
    35. }
    36. }
    37. ...
    38. }

  2. 发布提醒。

     
      
    1. import reminderAgent from '@ohos.reminderAgentManager';
    2. ...
    3. export class ReminderService {
    4. public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
    5. let reminder = this.initReminder(alarmItem);
    6. reminderAgent.publishReminder(reminder, (err, reminderId) => {
    7. if (callback != null) {
    8. callback(reminderId);
    9. }
    10. });
    11. }
    12. private initReminder(item: ReminderItem): reminderAgent.ReminderRequestAlarm {
    13. ...
    14. }
    15. ...
    16. }

如果需要删除提醒,可以调用cancelReminder()接口实现。

 
  1. import reminderAgent from '@ohos.reminderAgentManager';
  2. ...
  3. export class ReminderService {
  4. public deleteReminder(reminderId: number) {
  5. reminderAgent.cancelReminder(reminderId);
  6. }
  7. ...
  8. }

如果需要修改提醒,则需要先进行旧提醒的删除,再新增新的提醒。

 
  1. public async setAlarmRemind(alarmItem: AlarmItem) {
  2. let index = await this.findAlarmWithId(alarmItem.id);
  3. if (index !== Constants.DEFAULT_NUMBER_NEGATIVE) {
  4. this.reminderService.deleteReminder(alarmItem.id);
  5. } else {
  6. ...
  7. }
  8. this.reminderService.addReminder(alarmItem, (newId) => {
  9. alarmItem.id = newId;
  10. ...
  11. })
  12. }

参考

更多后台代理提醒场景和相关知识请参考开发指南和API参考:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/759616
推荐阅读
相关标签
  

闽ICP备14008679号