如何折叠 Android 通知?

Posted

技术标签:

【中文标题】如何折叠 Android 通知?【英文标题】:How to collapse Android notifications? 【发布时间】:2010-09-18 02:09:20 【问题描述】:

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

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

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

谢谢!

【问题讨论】:

您的问题已得到解答,但我将补充一点澄清。折叠键不适用于此类情况 - 来自文档:“[折叠键] - 用于在设备离线时折叠一组类似消息的任意字符串,以便仅将最后一条消息发送到客户端。这是为了避免在手机重新联机时向手机发送太多消息。”一旦意图在手机上运行(您的代码被调用),就 C2DM 代码而言,C2DM 消息已被发送、传递和遗忘。 【参考方案1】:

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

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);

【讨论】:

【参考方案2】:

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

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

【讨论】:

接受 Rahul 的回答,因为它回答了我原来的问题,但我肯定也使用了 number 属性——感谢您的提示! @yayitswei,没关系,我将我的答案框定为对 Rahul 答案的补充。【参考方案3】:

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

在 chrome to phone 源码中,有一个名为 sendNoRetry 的方法,其中包含这一行:

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

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

【讨论】:

【参考方案4】:

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

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

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

更多详情请访问:https://documentation.onesignal.com/reference#create-notification

【讨论】:

以上是关于如何折叠 Android 通知?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在 android 4.2 上折叠状态栏? [复制]

Xamarin android 分组通知未被可折叠摘要取代

如何折叠/分组博览会通知

Android:导航抽屉子菜单:如何折叠导航项

如何在 GCM 中使用折叠键

在 Android 托盘上显示 Firebase 通知数据消息