你是不是也在想——“鸿蒙这么火,我能不能学会?”
答案是:当然可以!
这个专栏专为零基础小白设计,不需要编程基础,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。
不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,就能在这里搞懂鸿蒙开发,并做出属于自己的App!
📌 关注本专栏《零基础学鸿蒙开发》,一起变强!
每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是小白酷爱学习,我们一起上路 🚀
全文目录:
前言
在现代操作系统中,通知是应用程序与用户交互的重要方式。在鸿蒙系统中,通知不仅用于展示应用的信息,还可以帮助系统和应用进行事件响应、消息推送、任务提醒等。而对于某些应用(如通知助手、信息管理类应用等),监听和处理系统级通知是一个非常重要的功能。
本文将介绍如何在鸿蒙系统中实现系统级通知监听与处理,包括如何使用NotificationSubscriber
注册监听、如何过滤通知内容与类型、UI展示与数据持久化的逻辑、以及在实现通知助手App时需要注意的合规与隐私问题。
NotificationSubscriber注册监听
鸿蒙系统提供了NotificationSubscriber
类来实现对系统通知的监听。通过注册通知监听器,应用可以获取系统发出的各种通知,并根据需求进行处理。
1. 注册通知监听器
为了监听系统通知,首先需要在应用中注册NotificationSubscriber
。NotificationSubscriber
是一个观察者模式的实现,当系统发布通知时,监听器会接收到通知并执行相关逻辑。
public class NotificationListenerService extends Ability {
private NotificationSubscriber notificationSubscriber;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
// 创建NotificationSubscriber对象并注册监听
notificationSubscriber = new NotificationSubscriber();
notificationSubscriber.setListener(new NotificationSubscriber.Listener() {
@Override
public void onNotificationPosted(Notification notification) {
// 处理收到的通知
handleNotification(notification);
}
@Override
public void onNotificationRemoved(Notification notification) {
// 处理移除的通知
}
});
// 注册通知监听器
notificationSubscriber.register();
}
@Override
public void onStop() {
super.onStop();
// 注销通知监听器
if (notificationSubscriber != null) {
notificationSubscriber.unregister();
}
}
}
在上面的代码中,我们首先创建了一个NotificationSubscriber
对象,并为其设置了监听器。每当系统发布新通知时,onNotificationPosted
方法就会被触发,开发者可以在此方法中处理接收到的通知。
2. 监听通知内容
NotificationSubscriber.Listener
接口提供了onNotificationPosted
方法,用于接收通知信息。通过此方法,我们可以获取通知的详细内容,例如标题、文本内容、类型等。
public void handleNotification(Notification notification) {
String title = notification.getTitle();
String content = notification.getContent();
String packageName = notification.getPackageName();
// 进一步处理通知内容
}
过滤通知内容与类型(如微信、短信)
在监听系统级通知时,可能需要根据通知的来源和类型进行过滤。对于一些特定类型的通知(如来自微信、短信等应用的通知),可以进行特殊处理或者忽略。
1. 通过包名过滤
每个通知都有一个packageName
字段,表示发送该通知的应用程序包名。通过比较packageName
,我们可以过滤来自特定应用(如微信、短信等)的通知。
public void handleNotification(Notification notification) {
String packageName = notification.getPackageName();
if (packageName.equals("com.tencent.mm")) {
// 处理微信通知
} else if (packageName.equals("com.android.messaging")) {
// 处理短信通知
}
}
通过这种方式,我们可以只处理来自特定应用的通知,而忽略其他无关通知。
2. 根据通知类型过滤
除了包名,通知的类型也是我们可以过滤的一个关键字段。例如,短信通知可能包含特定的关键词,或者微信通知的标题格式是固定的。我们可以通过检查通知内容的标题或正文来进行进一步的筛选。
public void handleNotification(Notification notification) {
String title = notification.getTitle();
String content = notification.getContent();
if (title != null && title.contains("微信")) {
// 处理微信相关通知
} else if (content != null && content.contains("短信")) {
// 处理短信相关通知
}
}
通过检查通知的内容,我们可以进一步过滤特定类型的通知,并做出相应的处理。
UI展示与数据持久化逻辑
在监听到系统通知并进行处理后,通常需要将通知展示给用户或进行数据持久化处理。比如,通知助手App需要展示通知详情,并在本地存储通知记录,以便用户查看历史通知。
1. UI展示
通过鸿蒙的Notification
组件,可以将接收到的通知内容展示给用户。通常,可以创建一个列表展示所有历史通知,或者直接弹出一个浮动的通知窗口。
public void showNotification(Notification notification) {
// 创建通知对象并显示
NotificationRequest request = new NotificationRequest(1, notification.getTitle(), notification.getContent(), NotificationRequest.NotificationType.NORMAL);
request.setContent(notification.getContent());
request.setTitle(notification.getTitle());
NotificationManager notificationManager = new NotificationManager();
notificationManager.publishNotification(request);
}
2. 数据持久化
为了记录历史通知,通常需要将通知内容保存到本地数据库或文件中。可以使用鸿蒙提供的数据库或文件存储API,将通知内容保存在本地。
public void saveNotificationToDatabase(Notification notification) {
// 使用SQLite数据库保存通知信息
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", notification.getTitle());
values.put("content", notification.getContent());
values.put("package_name", notification.getPackageName());
db.insert("notifications", null, values);
}
通过这种方式,我们可以持久化通知内容,方便后续的历史查询或查看。
示例:实现一个通知助手App
假设我们要实现一个通知助手App,该App需要监听并处理系统级通知,支持过滤指定应用的通知,并将通知内容展示给用户,同时保存通知历史。
1. 注册通知监听器
我们使用NotificationSubscriber
来注册监听器,监听系统级通知。
public class NotificationHelperService extends Ability {
private NotificationSubscriber notificationSubscriber;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
// 创建NotificationSubscriber对象并注册监听
notificationSubscriber = new NotificationSubscriber();
notificationSubscriber.setListener(new NotificationSubscriber.Listener() {
@Override
public void onNotificationPosted(Notification notification) {
// 处理通知
handleNotification(notification);
}
@Override
public void onNotificationRemoved(Notification notification) {
// 处理移除的通知
}
});
// 注册通知监听器
notificationSubscriber.register();
}
@Override
public void onStop() {
super.onStop();
// 注销通知监听器
if (notificationSubscriber != null) {
notificationSubscriber.unregister();
}
}
}
2. 处理通知与过滤
在handleNotification
方法中,处理接收到的通知并根据包名或类型进行过滤。
public void handleNotification(Notification notification) {
String packageName = notification.getPackageName();
if (packageName.equals("com.tencent.mm")) {
// 处理微信通知
saveNotificationToDatabase(notification);
showNotification(notification);
} else if (packageName.equals("com.android.messaging")) {
// 处理短信通知
saveNotificationToDatabase(notification);
showNotification(notification);
}
}
3. 展示通知与保存历史
将接收到的通知显示给用户,并将其保存到本地数据库。
public void showNotification(Notification notification) {
NotificationRequest request = new NotificationRequest(1, notification.getTitle(), notification.getContent(), NotificationRequest.NotificationType.NORMAL);
request.setContent(notification.getContent());
request.setTitle(notification.getTitle());
NotificationManager notificationManager = new NotificationManager();
notificationManager.publishNotification(request);
}
public void saveNotificationToDatabase(Notification notification) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", notification.getTitle());
values.put("content", notification.getContent());
values.put("package_name", notification.getPackageName());
db.insert("notifications", null, values);
}
合规与隐私注意事项
在实现系统级通知监听与处理功能时,合规与隐私是至关重要的。开发者应遵循以下几点:
- 权限管理:在应用中,需要明确申请用户的通知权限,避免滥用权限。在鸿蒙系统中,需要在
config.json
文件中声明适当的权限,并确保权限的使用符合隐私政策。 - 数据加密与保护:存储通知内容时,尤其是敏感信息(如短信内容、个人消息等),需要进行加密和保护,以防止用户隐私泄露。
- 用户同意:在启用通知监听功能前,应确保用户同意并清楚了解该功能的使用。避免在未授权的情况下监听或处理用户的通知。
{
"permissions": [
{
"name": "ohos.permission.READ_NOTIFICATIONS",
"level": "normal"
}
]
}
总结
通过鸿蒙的NotificationSubscriber
,开发者可以方便地实现系统级通知的监听与处理。本文介绍了如何通过注册通知监听器、过滤通知内容与类型、展示UI和保存数据等步骤来实现一个通知助手App。实现过程中,需要特别注意权限管理、数据保护和用户隐私的合规问题,确保应用符合相关法律和隐私政策。
❤️ 如果本文帮到了你…
- 请点个赞,让我知道你还在坚持阅读技术长文!
- 请收藏本文,因为你以后一定还会用上!
- 如果你在学习过程中遇到bug,请留言,我帮你踩坑!