代码之家  ›  专栏  ›  技术社区  ›  yayitswei

如何折叠Android通知?

  •  2
  • yayitswei  · 技术社区  · 15 年前

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

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

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

    谢谢!

    4 回复  |  直到 9 年前
        1
  •  5
  •   DeRagan    15 年前

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

    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
  •  3
  •   st0le    15 年前

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

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

        3
  •  1
  •   Josh Clemm    15 年前

    除了其他答案外,在C2DM请求中还有一个参数被调用 delay_while_idle . 确保你没有把它包括在内,或者把它弄错。当屏幕关闭时,您的手机处于“空闲”状态(即在您睡觉时)。谷歌把你所有的信息都排在服务器上,直到手机不空闲(比如早上打开屏幕)。然后,Google一次发送所有15条消息,然后您将在此时显示它们。

    在chrome-to-phone源代码中,有一个方法调用 sendNoRetry 用这条线:

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

    确保这不是真的,然后谷歌服务器将按预期每30分钟向您发送一次c2dm消息。

        4
  •  0
  •   Faizan Noor    9 年前

    崩塌的 钥匙应该能完成这项工作。要更新任何以前的通知,只需使用相同的密钥。要在设备上生成新通知,请使用其他密钥。

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

    所以所有unqiue-collapse-id通知将在设备上分组。

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