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

news2025/2/22 10:46:48

一、简介

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

后台代理提醒业务类型:

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

image.png

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

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

image.png

以新增一个9点的喝水提醒为例:假设用户在8点新增这个喝水提醒,应用根据用户设置的信息生成提醒实例并发布提醒。由后台代理提醒服务调用系统服务启动计时。到9点时,系统唤醒后台代理提醒服务发布通知,最终由通知服务触发桌面显示通知。

image.png

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

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

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

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

二、给应用添加提醒

image.png

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

  • 添加后台代理提醒使用权限。
"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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1166233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

取消elementUI中table的选中状态

1、表格上绑定ref 2、清空用户选中数据 this.$refs.loopRef.clearSelection()

ATE新能源汽车充电桩自动负载测试系统

随着新能源汽车的普及,充电桩的需求也在不断增加,为了确保充电桩的性能和安全性,对其进行负载测试是非常重要的。ATE新能源汽车充电桩自动负载测试系统是一种专门用于检测充电桩性能的设备,它可以模拟各种实际使用场景&#xff0c…

swift语言下SurfGen库做的爬虫是什么样的 ?

Swift语言并没有内置的爬虫库,但是你可以使用第三方库来实现爬虫功能。其中比较常用的是Alamofire和SwiftyJSON。Alamofire是一个基于Swift语言的HTTP网络库,可以用来发送HTTP请求和接收HTTP响应。而SwiftyJSON则是一个用于处理JSON数据的Swift库&#x…

22款奔驰GLS450升级迈巴赫踏板 上下车更加方便

原车升级前今天来一台奔驰GLS升级电动踏板,这台车原车是带固定踏板的,但是车主觉得不如电踏好,就来升级一套迈巴赫1:1的电动踏板。电动踏板我们也是经常改的项目,因为大型车没有个踏板确实不太方便。

数智赋能!麒麟信安参展全球智慧城市大会

10月31日至11月2日,为期三天的2023全球智慧城市大会长沙在湖南国际会展中心举办,大会已连续举办12届,是目前全球规模最大、专注于城市和社会智慧化发展及转型的主题展会。长沙市委常委、常务副市长彭华松宣布开幕,全球智慧城市大会…

2023最新版本 FreeRTOS教程 -3-消息队列-验证(动态创建)

队列概述 一块可读写的特殊缓冲区,读取空会导致任务挂起,以此来优化MCU的使用率 API函数 创建 g_xQueuePlatform xQueueCreate(10, //队列长度sizeof(struct input_data)//队列中每一个块的大小); 写入 xQueueSend(g_xQueuePlatform, &idata, 0);读取 xQueueReceive(g…

如何让企业配件管理高效又智能!仓库配件出入库管理系统哪家的好用?

在当今快速发展的商业环境中,企业运营的效率和管理的重要性日益凸显。对于许多企业来说,仓库配件管理是一个关键的环节,它不仅涉及到物品的存储和分发,还与企业的成本控制和运营流程紧密相关。然而,管理仓库配件是一项…

Oracle-执行计划生成及查看的几种方法

1. EXPLAIN FOR 语法: EXPLAIN PLAN FOR SQL语句SELECT * FROM TABLE(dbms_xplan.display());优点: 无需真正执行SQL 缺点: 没有输出相关的统计信息,例如产生了多少逻辑读、物理读、递归调用等情况无法判断处理了多少行无法判断…

跨境商城开发指南:10个必备步骤助您实现国际化零售业务飞跃

欢迎阅读本篇文章,作为跨境商城开发领域的专家,我将为您提供一份全面的指南,帮助您实现国际化零售业务的飞跃。在如今全球化的商业环境下,跨境电商已成为许多企业拓展市场的重要途径。通过合理规划和正确执行,您可以在…

java APP自动化测试AppIum

一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后 一、前言 随着移动互联网的发展,AP…

数电票试点新增5地,本文教您如何应对新变化

数电票试点新增五地! 10月27日,北京、贵州、山东、湖南、宁夏5省市税局相继发布《关于开展全面数字化的电子发票试点工作的公告》,宣布自11月1日起正式推行“数电票”开票试点。 根据各地发布的公告,自2023年11月1日起&#xff…

【蓝桥每日一题]-二分类型(保姆级教程 篇3) #路标设置 #跳石头

今天接着讲二分题型 目录 题目:路标设置 思路: 题目:跳石头 思路: 题目:路标设置 思路: 求:放n个路标后的最小空旷指数 二分查找:对空旷指数进行二分 二分依据: 该空旷指数下放…

CollageIt 3 Pro for mac:打造你的独特拼贴艺术,让创意无限可能

CollageIt 3 Pro for mac 是一款让用户在短时间内创作出令人惊叹的拼贴艺术的软件。这款强大的拼贴制作工具是专为 Mac 用户设计的,使创作拼贴画变得更加简单和高效。 CollageIt 3 Pro for mac 提供了丰富的拼贴元素,包括背景、图像、文本等&#xff0c…

c++实现观察者模式

前言 我觉得这是最有意思的模式&#xff0c;其中一个动&#xff0c;另外的自动跟着动。发布-订阅&#xff0c;我觉得很巧妙。 代码 头文件 #pragma once #include<vector> #include<string> #include<iostream>// 抽象观察者 class Aobserver { public:v…

第二证券:涨停板被打开说明什么?

涨停板&#xff0c;是股票价格动摇的限制性规则。简略来说&#xff0c;涨停板就是当某股票价格较前一个生意日的收盘价上涨了必定份额的时分&#xff0c;商场生意将受到限制&#xff0c;股票价格不能继续上涨&#xff0c;即当日该股票的涨幅上限。而当涨停板被翻开&#xff0c;…

用于 GaN-HEMT 功率器件仿真的 TCAD 方法论

目录 标题&#xff1a;TCAD Methodology for Simulation of GaN-HEMT Power Devices来源&#xff1a;Proceedings of the 26th International Symposium on Power Semiconductor Devices & ICs(14年 ISPSD)GaN-HEMT仿真面临的挑战文章研究了什么文章的创新点文章的研究方法…

做视频目标分割、人体姿态跟踪、语义part分割的同学看过来,李飞飞最新作品

SiamMAE&#xff1a;一种从视频中进行表示学习的孪生掩码自编码器&#xff0c;在视频目标分割、人体姿态跟踪、语义part分割上性能表现出色单位&#xff1a;斯坦福大学(李飞飞、吴佳俊等人), 普林斯顿大学(邓嘉) 在图像或场景之间建立对应关系是计算机视觉中的一项重大挑战&am…

恢复电脑删除的文件?这4个简单方法别错过!

“我经常都会把文件保存在电脑上&#xff0c;但是总是不可避免的会误删一些比较重要的文件。有什么比较容易操作的文件恢复方法可以推荐吗&#xff1f;非常感谢&#xff01;” 在日常使用电脑时&#xff0c;用户可能都不可避免的会出现误删文件的情况。这可能包括重要的文档、照…

治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 背景 某企业实时数仓团队通过数据收集、整合、计算和存储构建实时数据仓库&#xff0c;为企业提供快速、准确、可靠的实时数据分析和决策支持。目前该实时数仓团队…

5.2023-11-02发表的最新论文复现:SSA-VMD与小波分解结合的GNSS坐标时序降噪方法

2023-11-02发表的最新论文复现代码&#xff1a; 注&#xff1a;针对文献去噪流程进行了细节部分修改 1.将多尺度排列熵大于0.5的分量全部删除&#xff0c;发现其效果更佳 2.文中小波分解方法具体的方法不确定&#xff0c;本代码是应用小波阈值去噪于改进VMD相结合进行去噪 代…