【问题标题】:How do I differentiate between two WhatsApp messages?如何区分两条 WhatsApp 消息?
【发布时间】:2017-10-19 12:26:05
【问题描述】:

首先,我是如何从通知中读取 WhatsApp 消息的?

好吧,我进行了研究,并且已经能够以适当的权限实现NotificationListenerService没有任何卑鄙的策略)并收听来自 WhatsApp 的通知消息。感谢 this guy 给了我这个想法。

无论如何,我现在可以阅读消息,但问题是 WhatsApp 有时会多次发送相同的消息,但不会显示多个通知。我怎么知道?

我记录了我的听众收到的通知,发现了几条相同的消息。通知的一般结构如下所示:

StatusBarNotification.toString():

> 10-18 23:43:24.236 16159-16181/com.company D/WhatsApNotifListService:
> StatusBarNotification(pkg=com.whatsapp user=UserHandle{0} id=1
> tag=null score=0 key=0|com.whatsapp|1|null|10170: Notification(pri=0
> contentView=com.whatsapp/0x1090078 vibrate=null sound=null
> defaults=0x0 flags=0x200 color=0xffe65100 category=msg
> groupKey=group_key_messages vis=PRIVATE
> publicVersion=Notification(pri=0 contentView=com.whatsapp/0x1090078
> vibrate=null sound=null defaults=0x0 flags=0x0 color=0xffe65100
> category=msg vis=PRIVATE)))

Notification.extras(A Bundle) 结构:

> 10-18 23:42:46.199 16159-16211/com.company D/Util: android.title
> Manish (java.lang.String)
> 
> 10-18 23:42:46.199 16159-16211/com.company D/Util: android.subText
> null (null)
> 
> 10-18 23:42:46.201 16159-16211/com.company D/Util:
> android.car.EXTENSIONS Bundle[mParcelledData.dataSize=1852]
> (android.os.Bundle)
> 
> 10-18 23:42:46.201 16159-16211/com.company D/Util:
> android.showChronometer false (java.lang.Boolean)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.icon
> 2130840435 (java.lang.Integer)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.text Bdbdjd
> (java.lang.String)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.progress 0
> (java.lang.Integer)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.progressMax
> 0 (java.lang.Integer)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.showWhen
> true (java.lang.Boolean)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util:
> android.rebuild.applicationInfo ApplicationInfo{1a7615bc com.whatsapp}
> (android.content.pm.ApplicationInfo)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.largeIcon
> android.graphics.Bitmap@a4eb945 (android.graphics.Bitmap)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util: android.infoText
> null (null)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util:
> android.wearable.EXTENSIONS Bundle[mParcelledData.dataSize=668]
> (android.os.Bundle)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util:
> android.originatingUserId 0 (java.lang.Integer)
> 
> 10-18 23:42:46.202 16159-16211/com.company D/Util:
> android.progressIndeterminate false (java.lang.Boolean)

有没有什么方法可以提取出 Id 之类的东西来区分两条消息?

【问题讨论】:

  • 也许您可以存储以前的消息并检查它们是否存在。如果它们不相等,您可以清除消息缓存,并将其替换为最后一条已知消息?一个人不太可能多次发送相同的消息。我只是说这个想法,它可能不符合您的需求。
  • 提取邮件后,您将它们保存在哪里?
  • 您是在视图中显示它们还是将它们保存在某个地方?
  • @Xenolion : 一个 ArrayList(cache) 以及 SQLite
  • @Xenolion :我在 ArrayList 的 RecyclerView 中显示它们

标签: android notifications


【解决方案1】:

我不敢相信我解决了我的问题。时间戳就是答案。感谢@xenolion 建议时间。我的脑海中有关于时间不同的先入之见,但我只是检查了消息的时间戳,并且相同的消息具有相同的时间戳。

【讨论】:

  • 编码愉快!
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2023-03-26
  • 2013-04-23
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多