From 3e284d528e2148c541398b6e933e279a7abfaa79 Mon Sep 17 00:00:00 2001 From: wangsiyuan <2392948297@qq.com> Date: Tue, 12 Dec 2023 22:52:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20NotificationListener.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/NotificationListener.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nbee/echolink/service/NotificationListener.java b/app/src/main/java/com/nbee/echolink/service/NotificationListener.java index 460b105..f3f7013 100644 --- a/app/src/main/java/com/nbee/echolink/service/NotificationListener.java +++ b/app/src/main/java/com/nbee/echolink/service/NotificationListener.java @@ -2,6 +2,8 @@ package com.nbee.echolink.service; import android.app.Notification; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.util.Log; @@ -13,6 +15,7 @@ import com.nbee.echolink.utils.NetworkUtil; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -25,6 +28,8 @@ public class NotificationListener extends NotificationListenerService { "com.google.android.apps.messaging"); private HandleNoticeUtils handleNoticeUtils; private NetworkUtil networkUtil; + private HashMap recentLogs = new HashMap<>(); + private Handler logCleanerHandler = new Handler(Looper.getMainLooper()); @Override public void onCreate() { @@ -44,15 +49,24 @@ public class NotificationListener extends NotificationListenerService { String title = extras.getString(Notification.EXTRA_TITLE); String content = extras.getString(Notification.EXTRA_TEXT); String tickerText = sbn.getNotification().tickerText != null ? sbn.getNotification().tickerText.toString() : ""; + String logMessage = String.format("packageName: %s,title: %s,content: %s,tickerText: %s", packageName, title, content, tickerText); + // 检查是否在30秒内已打印过相同内容 + if (!shouldPrintLog(logMessage)) { + return; // 如果在30秒内已打印过,则跳过 + } + + Timber.d(logMessage); Timber.d("packageName: %s,title: %s,content: %s,tickerText: %s",packageName,title,content,tickerText); String appName = handleNoticeUtils.messageHandle(packageName); if ("微信".equals(appName) && tickerText.contains(":")) { String[] parts = tickerText.split(":", 2); + String sender = parts[0].trim(); // 去除两端的空格 + String message = parts.length > 1 ? parts[1].trim() : ""; // 同样去除两端的空格 WeChatMsg weChatMsg = new WeChatMsg(); weChatMsg.setPackageName(packageName); - weChatMsg.setSender(parts[0]); - weChatMsg.setMessage(parts.length > 1 ? parts[1] : ""); + weChatMsg.setSender(sender); + weChatMsg.setMessage(message); weChatMsg.setTitle(title); weChatMsg.setAppName(appName); weChatMsg.setCurrentTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date())); @@ -60,8 +74,6 @@ public class NotificationListener extends NotificationListenerService { Timber.d("准备发送微信消息: %s", weChatMsg); // 异步执行网络请求 networkUtil.postRequest(weChatMsg); - } else { - Timber.d("非微信通知或TickerText格式不正确,已忽略"); } } @@ -71,4 +83,24 @@ public class NotificationListener extends NotificationListenerService { // 当通知被移除时调用 Log.d(TAG, "通知被移除: " + sbn.getPackageName()); } + + /** + * 检查是否应打印日志 + */ + private boolean shouldPrintLog(String logMessage) { + Long lastPrintTime = recentLogs.get(logMessage); + long currentTime = System.currentTimeMillis(); + + if (lastPrintTime == null || (currentTime - lastPrintTime) > 30000) { + // 更新日志的打印时间 + recentLogs.put(logMessage, currentTime); + + // 安排一分钟后清理这个日志条目 + logCleanerHandler.postDelayed(() -> recentLogs.remove(logMessage), 60000); + + return true; // 如果没有打印过或距离上次打印超过30秒,则应打印 + } + + return false; // 如果在30秒内已打印过,则不打印 + } }