我每半小时向我的Android应用发送一次C2DM更新,这会创建一个通知。问题是,当我早上醒来时,我在状态栏中排队了15个通知。
我如何只保留最新通知,覆盖以前的通知?
我尝试查看C2DM文档(http://code.google.com/android/c2dm/),其中提到了一个名为collapse_key的参数,但我找不到如何使用它的解释,也不确定解决方案是在C2DM方面。
谢谢!
答案 0 :(得分: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);
答案 1 :(得分:3)
Notification
有一个名为number
的属性,在该图标下方显示一个小数字(用于多个通知)。它允许您使用相同的图标进行多次通知。
更新通知时使用相同的ID
。 :)干杯。
答案 2 :(得分: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消息。
答案 3 :(得分:0)
collapse_id 键应该完成这项工作。要更新任何先前的通知,只需使用相同的密钥。要在设备上生成新通知,请使用其他密钥。
例如, *对于聊天通知,请使用密钥"聊天" (collapse_id ="聊天") *对于邀请,请使用密钥"邀请" (collapse_id ="邀请")
因此,所有unqiue collapse_id通知都将在设备上进行分组。
有关详细信息,请访问:https://documentation.onesignal.com/reference#create-notification