HarmonyOS--后台代理提醒

一、概述

        HarmonyOS提供后台代理提醒功能,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。后台代理提醒就是由系统后台进程代理应用的提醒功能。后台代理提醒服务通过reminderAgentManager模块提供提醒定义、创建提醒、取消提醒等能力。

后台代理提醒业务类型:

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

         

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

        

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

         

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

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

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

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

二、给你的应用添加提醒--前置条件

        1、添加后台代理提醒使用权限

"module": {
  // ...
  "requestPermissions": [
    {
     "name": "ohos.permission.PUBLISH_AGENT_REMINDER"
    }
  ]
}

         2、导入后台代理提醒reminderAgentManager模块

        将此模块命名为reminderAgentManager

import { reminderAgentManager } from '@kit.BackgroundTasksKit';

三、给你的应用添加提醒--新增提醒实现

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

import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// ...

export class ReminderService {
  public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
    let reminder = this.initReminder(alarmItem);
    reminderAgentManager.publishReminder(reminder, (err, reminderId) => {
      if (callback != null) {
        callback(reminderId);
      }
    });
  }
   
  private initReminder(item: ReminderItem): reminderAgentManager.ReminderRequestAlarm {
    return {
      reminderType: item.remindType,
      hour: item.hour,
      minute: item.minute,
      daysOfWeek: item.repeatDays,
      title: item.name,
      ringDuration: item.duration * CommonConstants.DEFAULT_TOTAL_MINUTE,
      snoozeTimes: item.intervalTimes,
      timeInterval: item.intervalMinute * CommonConstants.DEFAULT_TOTAL_MINUTE,
      actionButton: [
        {
          title: '关闭',
          type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
        },
        // ...
      ],
      wantAgent: {
        pkgName: CommonConstants.BUNDLE_NAME,
        abilityName: CommonConstants.ABILITY_NAME
      },
      notificationId: item.notificationId,
      // ...
    }
  }
    
  // ...
}

        2、发布提醒

import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// ...

export class ReminderService {
  public addReminder(alarmItem: ReminderItem, callback?: (reminderId: number) => void) {
    let reminder = this.initReminder(alarmItem);
    reminderAgentManager.publishReminder(reminder, (err, reminderId) => {
      if (callback != null) {
        callback(reminderId);
      }
    });
  }
   
  private initReminder(item: ReminderItem): reminderAgentManager.ReminderRequestAlarm {
    // ...
  }
    
  // ...
}

四、给你的应用添加提醒--删除提醒实现

import { reminderAgentManager } from '@kit.BackgroundTasksKit';
// ...

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

五、给你的应用添加提醒--修改提醒实现

        需要先进行旧提醒的删除,再新增新的提醒。 

public async setAlarmRemind(alarmItem: AlarmItem) {
  let index: number = await this.findAlarmWithId(alarmItem.id);
  if (index !== CommonConstants.DEFAULT_NUMBER_NEGATIVE) {
    this.reminderService.deleteReminder(alarmItem.id);
  } else {
    // ...
  }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值