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

简介

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

后台代理提醒业务类型

在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

若是删除提醒流程需要使用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;
    ...
  })
}

原文地址:https://blog.csdn.net/Chen_xiaobao/article/details/134603355

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_14815.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注