
摘要
在日常开发中,系统通知是一种非常常见且重要的用户交互方式,比如提醒用户有新消息、任务完成,或者系统更新等。在 HarmonyOS 中,虽然通知机制与 Android 有许多相似之处,但在架构设计、API调用、权限处理上也有自己的独特之处。
本篇文章将带你一步步搭建一个可运行的鸿蒙通知示例,从权限配置、渠道创建、通知显示,到点击通知后跳转页面,结合实际场景一一拆解。
引言
鸿蒙系统正在逐步拓展其设备生态,从手机到平板再到车机、可穿戴设备,系统通知的应用场景也越来越广。在 HarmonyOS 3.0 及之后的版本中,通知机制更加模块化,并要求开发者严格按照权限配置、通知渠道等规范来开发。
实际开发中,如果你需要让用户在第一时间获取应用推送的内容(比如外卖送达、课程开始提醒等),通知就是最直接有效的方式。
鸿蒙通知开发实战指南
获取通知权限
添加权限配置
在 config.json
文件中添加如下权限,确保你的应用具备控制通知的能力:
json
{
"module": {
"reqPermissions": [
{
"name": "ohos.permission.NOTIFICATION_CONTROLLER"
}
]
}
}
创建通知渠道(HarmonyOS 3.0+)
代码示例
java
if (BuildVersion.getSdkApiVersion() >= BuildVersion.SDK_VERSION_S) {
NotificationHelper helper = new NotificationHelper(context);
NotificationSlot slot = new NotificationSlot(
NotificationSlotType.OTHER_TYPES,
"default_slot",
"默认通知渠道"
);
slot.setEnableVibration(true);
slot.setEnableLight(true);
helper.addNotificationSlot(slot);
}
📌 说明 :
NotificationSlot
相当于 Android 的 Channel,如果不配置,有些设备是不会显示通知的。
创建通知内容
创建 NotificationRequest 对象
java
NotificationRequest request = new NotificationRequest(100); // 100 是通知ID
request.setContentTitle("课程提醒");
request.setContentText("您的线上课程将在5分钟后开始,请准备好。");
request.setSlotType(NotificationSlotType.OTHER_TYPES);
request.setAutoDeletedTime(10000); // 自动删除时间10秒
request.setSmallIcon(ResourceTable.Media_ic_notification);
设置点击通知后的跳转行为
使用 PendingIntent 设置跳转目标
java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withBundleName("com.example.demo")
.withAbilityName("com.example.demo.MainAbility")
.build();
intent.setOperation(operation);
// 构建 PendingIntent
PendingIntent pendingIntent = PendingIntent.getAbility(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
request.setContentIntent(pendingIntent);
发送通知
java
NotificationHelper helper = new NotificationHelper(context);
helper.publishNotification(100, request);
典型应用场景与示例
📍 场景一:定时提醒(例如学习提醒)
在应用中你可以定时发送通知,提醒用户专注学习或开始会议。
java
request.setContentTitle("学习提醒");
request.setContentText("该开始今天的学习啦!");
结合闹钟或后台服务定时触发通知。
📍 场景二:聊天消息推送
收到新消息时立即通知用户查看,增强实时交互体验。
java
request.setContentTitle("新消息");
request.setContentText("李子晗:今天的作业你写完了吗?");
点击通知可跳转到聊天详情页面。
📍 场景三:任务完成反馈(如下载完成)
当任务处理完毕时通过通知反馈给用户,提高可用性。
java
request.setContentTitle("下载完成");
request.setContentText("您下载的文件已经保存到本地。");
用户点击后跳转到文件浏览或详情页。
在 Ability 中接收通知跳转 Intent
如果你需要在点击通知跳转的页面中处理逻辑,可以重写 onStart
方法:
java
@Override
public void onStart(Intent intent) {
super.onStart(intent);
if (intent != null) {
// 可根据intent参数做进一步处理
HiLog.info(LABEL_LOG, "从通知中跳转进入此页面");
}
}
QA环节:开发者常见疑问解答
Q1:为什么我发出的通知没有显示?
答:请检查是否设置了 NotificationSlot 并正确添加。鸿蒙系统从 3.0 起必须通过 Slot 管理通知渠道。
Q2:点击通知跳转没反应?
答 :请确认 PendingIntent 的目标 Ability 是否正确配置,并且该 Ability 存在于应用包中。另外,flag 使用 FLAG_ONE_SHOT
或 FLAG_UPDATE_CURRENT
来确保正确执行。
Q3:通知自动消失怎么实现?
答 :使用 request.setAutoDeletedTime(毫秒)
设置超时自动删除,也可以手动使用 cancelNotification(id)
来删除。
总结
通知作为一个重要的用户交互工具,在鸿蒙系统中具备完善而严谨的实现机制。从权限控制到内容展示,再到点击跳转,开发者可以通过本文提供的示例快速掌握其用法。
无论你是在做课程提醒 、聊天消息推送 还是任务进度通知,这些流程基本都可以套用。只要按部就班配置权限、槽位、意图,通知体验就能变得顺畅稳定。