HarmonyOS后台代理提醒

后台代理提醒

简介

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

后台代理提醒业务类型:

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

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

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

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

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

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

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

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

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

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

给你的应用添加提醒

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

  • 添加后台代理提醒使用权限。

    复制代码
    "module": {
      ...
      "requestPermissions": [
        {
         "name": "ohos.permission.PUBLISH_AGENT_REMINDER"
        }
      ]
    }
  • 导入后台代理提醒reminderAgentManager模块,将此模块命名为reminderAgent。

    复制代码
    import reminderAgent from '@ohos.reminderAgentManager';

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

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

    复制代码
    import reminderAgent from '@ohos.reminderAgentManager';
    ...
    
    export class ReminderService {
      public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
        let reminder = this.initReminder(alarmItem);
        reminderAgent.publishReminder(reminder, (err, reminderId) => {
          if (callback != null) {
            callback(reminderId);
          }
        });
      }
       
      private initReminder(item: ReminderItem): reminderAgent.ReminderRequestAlarm {
        return {
          reminderType: item.remindType,
          hour: item.hour,
          minute: item.minute,
          daysOfWeek: item.repeatDays,
          title: item.name,
          ringDuration: item.duration * Constants.DEFAULT_TOTAL_MINUTE,
          snoozeTimes: item.intervalTimes,
          timeInterval: item.intervalMinute,
          actionButton: [
            {
              title: '关闭',
              type: reminderAgent.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
            },
            ...
          ],
          wantAgent: {
            pkgName: globalThis.bundleName,
            abilityName: globalThis.abilityName
          },
          notificationId: item.notificationId,
          ...
        }
      }
        
      ...
    }
  2. 发布提醒。

    复制代码
    import reminderAgent from '@ohos.reminderAgentManager';
    ...
    
    export class ReminderService {
      public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
        let reminder = this.initReminder(alarmItem);
        reminderAgent.publishReminder(reminder, (err, reminderId) => {
          if (callback != null) {
            callback(reminderId);
          }
        });
      }
       
      private initReminder(item: ReminderItem): reminderAgent.ReminderRequestAlarm {
        ...
      }
        
      ...
    }

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

复制代码
import reminderAgent from '@ohos.reminderAgentManager';
...

export class ReminderService {
  public deleteReminder(reminderId: number) {
    reminderAgent.cancelReminder(reminderId);
  }
        
  ...
}

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

复制代码
public async setAlarmRemind(alarmItem: AlarmItem) {
  let index = await this.findAlarmWithId(alarmItem.id);
  if (index !== Constants.DEFAULT_NUMBER_NEGATIVE) {
    this.reminderService.deleteReminder(alarmItem.id);
  } else {
    ...
  }

  this.reminderService.addReminder(alarmItem, (newId) => {
    alarmItem.id = newId;
    ...
  })
}

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

相关推荐
互联网散修1 天前
鸿蒙星闪实战:从零构建跨设备文件传输——拆解文件传输数据流
华为·harmonyos
南村群童欺我老无力.1 天前
鸿蒙PC - 资源文件引用路径的隐蔽陷阱
华为·harmonyos
南村群童欺我老无力.1 天前
鸿蒙PC开发的Scroll组件maxHeight属性不存在
华为·harmonyos
Swift社区1 天前
鸿蒙游戏多设备发布流程详解
游戏·华为·harmonyos
以太浮标1 天前
华为eNSP模拟器综合实验之- 主机没有配置缺省网关时,通过路由式Proxy ARP实现通信(arp-proxy enable)
运维·网络·网络协议·华为·智能路由器·信息与通信
Goway_Hui1 天前
【ReactNative鸿蒙化-三方库使用与C-API集成】
c语言·react native·harmonyos
nashane1 天前
HarmonyOS 6.0 分布式相机实战:调用远端设备摄像头与AI场景识别(API 11+)
分布式·数码相机·harmonyos·harmonyos 5
Huanzhi_Lin1 天前
鸿蒙NEXT出包
华为·harmonyos·鸿蒙·harmony·鸿蒙next·hap
luoganttcc1 天前
华为昇腾(Ascend)等芯片,同样存在“寄存器 / 片上存储资源限制并发”的问题
算法·华为
╰つ栺尖篴夢ゞ1 天前
HarmonyOS Next面试题之主线程与子线程访问同一个单例,获取的对象是同一个吗?
单例模式·多线程·harmonyos·sendable·actor模型·内存隔离