鸿蒙应用开发之后台代理提醒

一、简介

随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求,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';

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

  • 用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,
        ...
      }
    }
      
    ...

    }

  • 发布提醒。

    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;
    ...
  })
}

参考代码:https://gitee.com/harmonyos/codelabs/tree/master/AlarmClock

相关推荐
HarmonyOS_SDK3 小时前
基于增强QUIC协议优化弱网下的直播观看体验
harmonyos
安好说AI3 小时前
Flutter 三方库 adaptive_image_picker 的鸿蒙化适配指南:零权限选图、纯 Dart 裁剪与目标大小压缩
flutter·harmonyos
昇腾知识体系5 小时前
msprobe/msdebug 全家桶:昇腾精度比对、溢出检测、msSanitizer 内存检测与 msOpProf 算子调优实战
人工智能·华为·知识图谱
2501_919749035 小时前
华为鸿蒙免费PDF工具—小羊免费PDF
华为·pdf·harmonyos·鸿蒙
贾伟康7 小时前
【口算王|10】HarmonyOS ArkTS 语音报题实战:协调朗读、作答和页面生命周期
生命周期·harmonyos·arkts·语音交互·texttospeech
贾伟康8 小时前
【口算王|08】HarmonyOS ArkTS 分类训练实战:让年级与运算分类参数保持一致
harmonyos·arkts·数据建模·路由参数·分类训练
小飞象—木兮8 小时前
经营复盘指南:核心概念、7 个核心指标、华为复盘管理标杆实践、案例·
华为
光锥智能8 小时前
华为新麒麟芯片、鸿蒙7问世,手机底层竞赛升级
华为·智能手机·harmonyos
贾伟康9 小时前
【口算王|09】HarmonyOS ArkTS 学习统计实战:计算连续训练和正确率趋势
harmonyos·arkts·数据可视化·preferences·学习统计
lqj_本人9 小时前
Flutter 鸿蒙实战:用 wakelock_plus 三方库给阅读页加上屏幕常亮
flutter·华为·harmonyos