HarmonyOS后台代理提醒

news/2024/7/24 9:54:55 标签: 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参考:

  • 后台代理提醒
  • @ohos.reminderAgentManager (后台代理提醒)

http://www.niftyadmin.cn/n/5269190.html

相关文章

【理论篇】SaTokenException: 非Web上下文无法获取Request问题解决 -理论篇

在我们使用sa-token安全框架的时候,有时候会提示:SaTokenException:非Web上下文无法获取Request 错误截图: 在官方网站中,查看常见问题排查: 错误追踪: 跟着源码可以看到如下代码: 从源码中&a…

eNSP小实验---(简单混合)

实验目的&#xff1a;实现vlan10 vlan20 172网段用户互访 1.拓扑图 2.配置 PC1 其它同理 SW4 <Huawei> <Huawei>u t m Info: Current terminal monitor is off. <Huawei>sys <Huawei>sys Enter system view, return user view with CtrlZ. [Hua…

BP神经网络原理,基于BP神经网络的去噪算法,基于BP神经网络的调制信号去噪

目录 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 遗传算法原理 遗传算法主要参数 遗传算法流程图 完整代码包含数据下载链接: 基于BP神经网络的去噪算法,基于BP神经网络的调制信号去噪(代码…

如何计算2的n次方

今天在写代码的时候&#xff0c;遇到了纹饰评分的计算&#xff0c;纹饰的等级和评分的关系为&#xff1a; 1级纹饰&#xff1a;202级纹饰&#xff1a;403级纹饰&#xff1a;80 得出纹饰等级grade和纹饰评分score的关系&#xff1a;score (2 ^ grade) * 10&#xff0c;所以就…

哈希扩展:位图与布隆过滤器

目录 1. 位图1.1 位图引入1.2 位图概念1.3 位图的模拟实现1.4 位图相关问题1.5 位图的应用 2. 布隆过滤器2.1 布隆过滤器概念2.2 模拟实现2.3 布隆过滤器相关问题2.3.1 哈希切分 1. 位图 1.1 位图引入 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&…

LeetCode:2276. 统计区间中的整数数目(TreeMap Java)

目录 2276. 统计区间中的整数数目 题目描述&#xff1a; 实现代码与解析&#xff1a; TreeMap 原理思路&#xff1a; 2276. 统计区间中的整数数目 题目描述&#xff1a; 给你区间的 空 集&#xff0c;请你设计并实现满足要求的数据结构&#xff1a; 新增&#xff1a;添加…

分发饼干(贪心算法)

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸 s[j]…

maui中实现加载更多 RefreshView跟ListView(1)

效果如图&#xff1a; MainPage.xaml.cs: using System; using System.Collections.ObjectModel; using System.Threading.Tasks; using Microsoft.Maui.Controls; using Microsoft.Maui.Controls.Xaml; using System.ComponentModel; using System.Runtime.CompilerServices…