Rob*_*b J 6 java notifications android android-notifications
需要一点帮助 - 这让我头疼!
我是 ReadItToMe 的开发人员,这是一款可以读出您的消息并让您通过语音回复的应用程序。去年我一直面临和黑客攻击的问题是重复通知。我将以 WhatsApp 为例。
如果我收到一条 WhatsApp 通知,那么快乐的日子,就是一条通知。如果我从不同的聊天中收到另一个.. 我会收到一个群组通知,前一个未读的聊天通知带有新的发布时间,因此您无法检查它是否来自过去,然后是新通知。
我尝试过的解决方案:
通过在通知到达时使用它们的标题、消息和包名称创建通知的哈希码来保持读取通知列表,然后在它们被解除时将它们从列表中删除 (onNotificationRemoved)。但是你知道吗!在上述场景中,所有通知都被删除然后重新发送,因此该解决方案是无用的。
比较时间戳,这不起作用,因为重复的通知有新的时间戳
比较密钥/ID,这些在聊天中永远不会改变,因此它们不是单个消息通知所独有的
还有很多我已经忘记了
检查通知是否是一个组以至少忽略它是行不通的,因为第一个通知始终是一个组。只有当有多个通知时,“群组”实际上是一个包含“2 条新消息”等内容的群组。
有没有人知道任何方法或能想到任何创造性的解决方案来准确确定(80% 的准确率)哪些通知是真正新的,哪些以前发布过?或者这只是在Android上从根本上打破了......
我遇到了同样的问题,我用这种方式修复了它,您可以将“when”属性与使用when的保存方式结合使用:
public void onNotificationPosted(StatusBarNotification sbn) {
if (System.currentTimeMillis() - sbn.getNotification().when > 3000 ||
isInArray(sbn.getNotification().when)) {
//when != sbn.getPostTime()
//If notification is 3 seconds old, it is discarted
return;
} else {
//Else, push to the array of notifications "when-id" to compare next time
goNextPosition(sbn.getNotification().when);
}
... next part of code
}
Run Code Online (Sandbox Code Playgroud)
long 与此通知相关的时间戳,自纪元以来以毫秒为单位。默认值:现在。选择与用户最相关的时间戳。对于大多数有限事件,这对应于事件发生的时间(或将要发生的时间,如果事件尚未发生但用户已被告知)。不定事件应根据活动开始的时间添加时间戳。
https://developer.android.com/reference/android/app/Notification.html#when
如果有人遇到这个问题,请随时问我,很抱歉,我是西班牙人。
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |