如何折叠Android通知?

时间:2010-09-18 02:09:20

标签: android push-notification android-c2dm

我每半小时向我的Android应用发送一次C2DM更新,这会创建一个通知。问题是,当我早上醒来时,我在状态栏中排队了15个通知。

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

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

谢谢!

4 个答案:

答案 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