通知与提醒系统:即时消息与日程管理实现

news/2025/11/30 1:20:14/文章来源:https://www.cnblogs.com/Autumnfish/p/19287867

通知与提醒系统:即时消息与日程管理实现

概述

在HarmonyOS应用开发中,通知与提醒系统是连接用户与应用的重要桥梁。本文将深入探讨如何在HarmonyOS Next(API 10+)中实现高效的通知管理和智能的日程提醒功能。

官方参考资料:

  • 通知 API参考
  • 通知开发指南

基础概念

什么是HarmonyOS通知系统?

HarmonyOS通知系统是一个统一的消息传递框架,允许应用向用户展示重要信息,即使用户没有主动使用该应用。

核心特点:

  • 统一的通知管理中心
  • 多设备协同通知
  • 丰富的模板支持
  • 智能的免打扰管理

通知类型分类

在HarmonyOS Next中,通知主要分为以下几类:

  • 即时通知:需要用户立即关注的消息
  • 持续通知:在后台运行的任务状态
  • 计划通知:在特定时间触发的提醒
  • 进度通知:显示任务进度的通知

环境配置

权限声明

首先需要在module.json5文件中声明必要的权限:

{"module": {"requestPermissions": [{"name": "ohos.permission.PUBLISH_AGENT_REMINDER","reason": "$string:reminder_permission_reason","usedScene": {"abilities": ["MainAbility"],"when": "always"}},{"name": "ohos.permission.NOTIFICATION_CONTROLLER","reason": "$string:notification_permission_reason"}]}
}

导入必要模块

import notificationManager from '@ohos.notificationManager';
import reminderAgent from '@ohos.reminderAgent';
import common from '@ohos.app.ability.common';

即时消息通知实现

发布基础通知

最基本的通知发布只需要几个关键参数:

// 发布简单文本通知
async function publishBasicNotification(): Promise<void> {try {const request: notificationManager.NotificationRequest = {content: {contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: '新消息提醒',text: '您收到一条新的即时消息',additionalText: '刚刚'}},id: 1,  // 通知ID,用于后续更新或取消slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION  // 使用社交通信槽位};await notificationManager.publish(request);console.info('通知发布成功');} catch (error) {console.error(`发布通知失败: ${error.code}, ${error.message}`);}
}

通知槽位(Slot)管理

通知槽位决定了通知的显示方式和行为:

槽位类型 适用场景 默认行为
SlotType.SOCIAL_COMMUNICATION 社交消息 振动+声音
SlotType.SERVICE_INFORMATION 服务信息 静音
SlotType.CONTENT_INFORMATION 内容更新 轻微提示
SlotType.OTHER_TYPES 其他类型 系统默认
// 创建自定义通知槽位
async function createNotificationSlot(): Promise<void> {const slot: notificationManager.NotificationSlot = {type: notificationManager.SlotType.SOCIAL_COMMUNICATION,level: notificationManager.SlotLevel.LEVEL_HIGH,  // 高优先级desc: '即时消息通知槽位',vibration: true,sound: 'notification_sound.wav',light: true,bypassDnd: false  // 不绕过免打扰};try {await notificationManager.addSlot(slot);console.info('通知槽位创建成功');} catch (error) {console.error(`创建槽位失败: ${error.code}, ${error.message}`);}
}

富媒体通知实现

HarmonyOS支持丰富的多媒体通知内容:

// 发布带图片的长文本通知
async function publishRichNotification(): Promise<void> {const request: notificationManager.NotificationRequest = {content: {contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT,longText: {title: '详细消息通知',text: '这是一条包含详细内容的长文本通知,用户可以展开查看更多信息...',additionalText: '长文本',briefText: '消息摘要',expandedTitle: '消息详情',longText: '这里是完整的消息内容,可以包含大量的文本信息...',image: $r('app.media.message_image')  // 引用资源文件中的图片}},id: 2,slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,deliveryTime: new Date().getTime(),  // 立即发送showDeliveryTime: true  // 显示发送时间};await notificationManager.publish(request);
}

通知操作按钮

为通知添加交互按钮:

// 添加操作按钮的通知
async function publishNotificationWithActions(): Promise<void> {const wantAgentInfo: notificationManager.WantAgentInfo = {wants: [{bundleName: 'com.example.myapp',abilityName: 'MessageDetailAbility',action: 'action.view.detail'}],operationType: notificationManager.OperationType.START_ABILITY,requestCode: 1001};const request: notificationManager.NotificationRequest = {content: {contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: '交互式通知',text: '点击按钮执行操作',additionalText: '可操作'}},id: 3,actionButtons: [{title: '回复',wantAgent: wantAgentInfo,autoCancel: true  // 点击后自动取消通知},{title: '标记已读',wantAgent: wantAgentInfo,autoCancel: true}]};await notificationManager.publish(request);
}

日程管理提醒实现

提醒代理基础

HarmonyOS的提醒代理(ReminderAgent)提供了强大的日程提醒功能:

// 创建一次性定时提醒
async function createOneTimeReminder(): Promise<number> {const reminder: reminderAgent.ReminderRequest = {reminderType: reminderAgent.ReminderType.REMINDER_TYPE_TIMER,triggerTimeInSeconds: Math.floor(Date.now() / 1000) + 3600,  // 1小时后触发title: '会议提醒',content: '团队周会将在1小时后开始',expiredContent: '会议提醒已过期',snoozeContent: '会议提醒已延迟',notificationId: 1001,slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,wantAgent: {pkgName: 'com.example.myapp',abilityName: 'MeetingDetailAbility'}};try {const reminderId = await reminderAgent.publishReminder(reminder);console.info(`提醒创建成功,ID: ${reminderId}`);return reminderId;} catch (error) {console.error(`创建提醒失败: ${error.code}, ${error.message}`);return -1;}
}

日历提醒实现

基于日历事件的提醒更加精确:

// 创建日历事件提醒
async function createCalendarReminder(): Promise<number> {const calendarReminder: reminderAgent.ReminderRequestCalendar = {reminderType: reminderAgent.ReminderType.REMINDER_TYPE_CALENDAR,dateTime: {year: 2024,month: 6,day: 15,hour: 14,minute: 30,second: 0},repeatMonths: [1, 2, 3, 4, 5, 6],  // 重复月份repeatDays: [1, 15],  // 每月1号和15号title: '月度报告提交',content: '请提交本月的项目进度报告',expiredContent: '报告提交已过期',snoozeContent: '报告提醒已延迟',notificationId: 1002,slotType: notificationManager.SlotType.SERVICE_INFORMATION};const reminderId = await reminderAgent.publishReminder(calendarReminder);return reminderId;
}

提醒管理操作

// 提醒管理类
class ReminderManager {private reminderIds: number[] = [];// 取消特定提醒async cancelReminder(reminderId: number): Promise<void> {try {await reminderAgent.cancelReminder(reminderId);const index = this.reminderIds.indexOf(reminderId);if (index > -1) {this.reminderIds.splice(index, 1);}console.info(`提醒 ${reminderId} 已取消`);} catch (error) {console.error(`取消提醒失败: ${error.code}, ${error.message}`);}}// 取消所有提醒async cancelAllReminders(): Promise<void> {try {await reminderAgent.cancelAllReminders();this.reminderIds = [];console.info('所有提醒已取消');} catch (error) {console.error(`取消所有提醒失败: ${error.code}, ${error.message}`);}}// 获取有效提醒async getValidReminders(): Promise<reminderAgent.ReminderRequest[]> {try {const reminders = await reminderAgent.getValidReminders();return reminders;} catch (error) {console.error(`获取提醒失败: ${error.code}, ${error.message}`);return [];}}
}

高级特性

通知分组管理

对于聊天类应用,消息分组显示非常重要:

// 创建分组通知
async function publishGroupedNotification(): Promise<void> {const groupNotification: notificationManager.NotificationRequest = {content: {contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: '聊天群组',text: '3条新消息',additionalText: '群聊'}},id: 100,groupName: 'chat_group_001',  // 分组名称groupOverview: '您有3条未读消息',  // 分组概览slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION};// 发布分组摘要通知await notificationManager.publish(groupNotification);// 发布分组内的具体消息const messages = [{ id: 101, text: 'Alice: 你好!' },{ id: 102, text: 'Bob: 项目进展如何?' },{ id: 103, text: 'Charlie: 会议记录已上传' }];for (const message of messages) {const messageRequest: notificationManager.NotificationRequest = {content: {contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: '群组消息',text: message.text,additionalText: '刚刚'}},id: message.id,groupName: 'chat_group_001',slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION};await notificationManager.publish(messageRequest);}
}

进度通知实现

// 发布进度通知
class ProgressNotification {private request: notificationManager.NotificationRequest;private currentProgress: number = 0;constructor() {this.request = {content: {contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_PROGRESS,progress: {title: '文件下载',text: '正在下载...',additionalText: '0%',progressValue: 0,maxProgress: 100,status: '进行中'}},id: 200,slotType: notificationManager.SlotType.SERVICE_INFORMATION,isOngoing: true  // 持续通知,用户无法手动清除};}// 开始进度通知async start(): Promise<void> {await notificationManager.publish(this.request);}// 更新进度async updateProgress(progress: number): Promise<void> {this.currentProgress = progress;this.request.content.progress.progressValue = progress;this.request.content.progress.additionalText = `${progress}%`;if (progress >= 100) {this.request.content.progress.status = '已完成';this.request.isOngoing = false;  // 完成后允许用户清除}await notificationManager.publish(this.request);}// 完成进度async complete(): Promise<void> {await this.updateProgress(100);}
}

智能免打扰集成

// 检查和管理免打扰设置
async function manageDndSettings(): Promise<void> {try {// 获取当前免打扰模式const dndMode = await notificationManager.getDoNotDisturb();console.info(`当前免打扰模式: ${dndMode.type}`);// 检查是否可以发送通知if (dndMode.type === notificationManager.DoNotDisturbType.NONE) {console.info('可以正常发送通知');} else {console.info('当前处于免打扰模式,通知可能被静音');}} catch (error) {console.error(`获取免打扰设置失败: ${error.code}, ${error.message}`);}
}

总结与最佳实践

通过本文的学习,我们深入探讨了HarmonyOS Next中的通知与提醒系统实现,从基础概念到高级特性,全面掌握了即时消息通知和日程提醒的开发技能。

核心要点回顾

  • 通知系统基础:理解了通知的类型、权限配置和槽位管理机制
  • 即时消息实现:掌握了基础通知、富媒体通知和交互式通知的开发方法
  • 日程管理能力:学习了一次性提醒和日历事件提醒的创建与管理
  • 高级特性应用:实现了通知分组、进度通知和免打扰集成等功能

实践建议

在实际项目开发中,建议遵循以下最佳实践:

  1. 合理的通知频率:避免过于频繁的通知,影响用户体验
  2. 精准的权限管理:仅请求必要的通知权限,并提供清晰的使用说明
  3. 场景化的槽位选择:根据通知类型选择合适的槽位,提供一致的用户体验
  4. 完善的错误处理:添加适当的错误捕获和重试机制,确保通知可靠性
  5. 测试驱动开发:在不同设备和系统版本上进行充分测试,确保兼容性

未来展望

随着HarmonyOS生态的不断发展,通知与提醒系统也在持续演进。未来我们可以期待:

  • 更多元化的通知模板和交互方式
  • 更智能的用户行为分析和个性化通知推送
  • 更深入的多设备协同体验,实现通知在不同设备间的无缝流转
  • 更丰富的系统集成能力,与日历、任务管理等系统功能深度融合

继续学习

想要进一步提升HarmonyOS应用开发能力,可以关注以下相关主题:

  • HarmonyOS分布式任务调度
  • 后台任务管理与优化
  • 用户隐私保护最佳实践
  • 应用性能调优技巧

通过合理利用通知与提醒功能,我们可以构建出更加智能、高效、用户友好的HarmonyOS应用,为用户提供卓越的移动体验。

祝您开发顺利!

需要参加鸿蒙认证的请点击 鸿蒙认证链接

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

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

相关文章

try/catch/finally:完善的错误处理策略

try/catch/finally:完善的错误处理策略 概述 在 HarmonyOS 应用开发中,错误处理是保证应用稳定性和用户体验的关键环节。本文将深入探讨 HarmonyOS Next(API 10 及以上版本)中的错误处理机制,帮助开发者构建更加健…

4种XML解析方式详解

详细讲解四种主流的XML解析方式,包括其原理、特点、适用场景和代码示例。 四种方式,可以分为两大类:基于树的解析:将整个XML文档一次性加载到内存,形成一棵树形结构。DOM基于事件的解析:顺序读取XML文档,遇到节…

20232415 2025-2026-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 2.实验目的 3.实验环境 4.实验过程与分析 4.1 使用SET工具建立冒名网站 4.1.1 建立冒名网站 4.1.2 验证欺骗效果 在浏览器中访问伪造的监听地址,发现能够看到一个与天翼快递登录页面相同的页面,说明冒名网…

2025 Launch X431 PRO3 ACE: Online ECU Coding 38+ Services for Euro/Amer Vehicles with CANFD/DoIP

Problem: Outdated Tools Can’t Keep Up with Modern Vehicle Technology Today’s European and American vehicles are more advanced than ever, packed with cutting-edge ECUs, complex protocols like CAN FD a…

QtSingleapplication单实例-源码分析

QtSingleapplication单实例-源码分析 目录QtSingleapplication单实例-源码分析官方案例 QtSingleApplication分析1. 描述2. 类解析QtLocalPeerQtSingleApplication3. 实际案例consoletrivial4. 逻辑流程(AI整理)QtSing…

2025解决VS C# NUGET 安装System.Data.SQLite+SourceGear.SQLite3 不支持 AnyCPU 的系列问题

环境:isual Studio 2022 项目:.NETFramework,Version=v4.8 时间:2025年11月30日 注:此问题在网络上搜到的解决办法比较旧,且部分失效,所以作此解决记录 使用Visual Studio NuGet方式安装System.Data.SQLite后会因为缺少…

102302156 李子贤 数据采集第四次作业

作业1 要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东…

东华萌新挑战赛 密室逃脱

点击查看代码 #include<bits/stdc++.h>using namespace std;bool check(int k,int n,const vector<vector<int> >& pos) {//枚举所有可以作为障碍区的起始位置 for(int r=0;r<=n-k;r++){for(…

第40天(中等题 数据结构)

打卡第四十天 2道简单题+1道中等题题目:思路:哈希表+位运算 代码: class Solution { public:int similarPairs(vector<string>& words) {unordered_map<int,int> cnt;int ans = 0;for(auto &s:…

核心功能详解

Vue3 大屏可视化平台核心功能详解 一、Composables 架构 Vue3 Composables 是该项目的核心架构模式,实现了逻辑复用和关注点分离。 1. usePersonnel - 人员管理 import { usePersonnel } from @/composables/usePerso…

2025-11-30-Nature Genetics | 本周最新文献速递

文章标题: Genetic associations with educational fields 中文标题: 基因与教育:解码教育领域选择背后的遗传驱动力! 关键词: 教育领域、全基因组关联研究、遗传相关性、社会分层、多基因风险评分 摘要总结: 教…

效果-Element 3D

--本篇导航--安装及配置基本操作 导入(给AI文件导入E3D、图片挤出、加载贴图、导入外部模型) 多个图层添加到一个组里安装及配置 可以直接安装Element 3D,也可以安装Videocopilot Optical Flares套件。 安装配置 如…

2025苏州餐饮公司测评:苏州会议餐配送选这些,全区域超省心

2025苏州餐饮公司测评:苏州会议餐配送选这些,全区域超省心!在苏州筹备会议餐配送时,选择合适的服务商是保障会议顺利开展的关键环节。结合行业实践与用户需求,可从以下四个核心维度综合考量,确保选到省心、可靠的合…

2025苏州承包食堂找哪家?苏州食堂承包优选清单

2025苏州承包食堂找哪家?苏州食堂承包优选清单!在苏州选择食堂承包服务时,建议从以下几个维度进行综合评估:首先考察服务商的食品安全管理体系,包括食材溯源能力和厨房操作规范;其次关注供应链稳定性,自有种植基…

2025不锈钢阀门厂家推荐:从口碑榜到销量榜清单在此

2025不锈钢阀门厂家推荐:从口碑榜到销量榜清单在此!阀门作为管路流体输送系统的核心控制部件,承担着导流、截止、调节等关键功能,广泛应用于水、蒸汽、腐蚀性介质等多种流体的控制场景。其中,不锈钢阀门凭借优异的耐…

2025脱酸脱盐设备公司有哪些:物料脱盐服务商优选指南

2025脱酸脱盐设备公司有哪些:物料脱盐服务商优选指南!在选择物料脱盐服务商时,建议从技术路线、运行成本、设备稳定性和项目经验四个维度进行综合评估。首先,需明确自身物料的特性(如盐分组成、浓度、pH值等),选择…

2025隔音窗户哪个牌子好:广州隔音窗户哪家好盘点大测评

2025隔音窗户哪个牌子好:广州隔音窗户哪家好盘点大测评!广州隔音窗户选购要点在广州这样的一线城市,交通噪音、施工噪音和生活噪音等问题日益突出。选择适合的隔音窗户时,建议从以下几个专业角度进行考量:隔音性能参…

截止阀厂家哪家好?2025截止阀品牌排行榜

截止阀是工业管路系统里的 “开关能手”,能精准切断或接通管路中的介质,在石油、化工、电力、城建等多个领域都发挥着关键作用。它的性能好坏直接影响管路系统的安全运行和介质输送效率,所以选择靠谱的截止阀厂家至…

2025全自动吸吮式过滤器推荐厂家榜单

2025全自动吸吮式过滤器推荐厂家榜单。作为工业流体处理环节的关键设备,全自动吸吮式过滤器主要用于去除流体中的固体杂质、悬浮物等污染物,保障后续生产设备的稳定运行与最终产品质量。其核心优势十分突出,无需停机…