2

我每 1/2 小时向我的 Android 应用程序发送 C2DM 更新,这会创建一个通知。问题是,当我早上醒来时,我会在状态栏中收到 15 条通知。

我如何只保留最新的通知,覆盖以前的通知?

我尝试查看 C2DM 文档(http://code.google.com/android/c2dm/),其中提到了一个名为 collapse_key 的参数,但我找不到如何使用它的解释,我也不确定解决方案位于 C2DM 方面。

谢谢!

4

4 回答 4

5

如果您想取消之前在视图上设置的任何通知,您可以尝试设置这些标志之一。

PendingIntent.FLAG_CANCEL_CURRENT or  PendingIntent.FLAG_UPDATE_CURRENT 

我相信这样的东西应该取代你的旧通知

 NotificationManager mManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 Intent intent = new Intent(this,test.class);
 Notification notification = new Notification(R.drawable.icon, "Notify", System.currentTimeMillis());
 notification.setLatestEventInfo(this,"App Name","Description of the notification",
 PendingIntent.getActivity(this.getBaseContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT));
 mManager.notify(0, notification);
于 2010-09-18T09:30:43.990 回答
3

Notification有一个名为的属性number,在图标下方显示一个小数字(用于多个通知)。它使您可以将相同的图标用于多个通知。

ID在更新通知时使用相同的方法。:) 干杯。

于 2010-09-18T09:42:08.780 回答
1

除了其他答案之外,您的 C2DM 请求中还有一个名为delay_while_idle. 确保您不包括该内容或使其为假。当屏幕关闭时(即在您睡觉时),您的手机处于“空闲”状态。谷歌在服务器上排队你所有的消息,直到手机没有空闲(即当你早上打开屏幕时)。然后,Google 一次发送所有 15 条消息,然后您将它们显示出来。

在 chrome to phone 源代码中,有一个sendNoRetry用这一行调用的方法:

if (delayWhileIdle) {
            postDataBuilder.append("&")
                .append(PARAM_DELAY_WHILE_IDLE).append("=1");
}

确保它不是真的,然后 Google 服务器会按预期每 30 分钟向您发送一次 C2DM 消息。

于 2011-03-18T01:18:51.867 回答
0

collapse_id键应该可以完成这项工作。要更新任何以前的通知,只需使用相同的密钥。要在设备上生成新通知,请使用不同的密钥。

例如, * 对于聊天通知,使用键“chat”(collapse_id = “chat”) * 对于邀请,使用键“invite”(collapse_id = “invite”)

所以所有 unqiue collapse_id 通知将在设备上分组。

有关更多详细信息,请访问:https ://documentation.onesignal.com/reference#create-notification

于 2016-12-13T12:41:59.967 回答