来自GCM的堆叠通知不适用于setGroup

时间:2016-05-09 13:51:16

标签: android google-cloud-messaging android-notifications

我在扩展GcmListenerService的类中有以下通知逻辑,并在一个通知到达时被调用。然后,当点击时,应用程序会将您带到MainActivity,正确显示通知。

public static void mostrarAvisoBarraEstado(Context context, String alerts)
{
    Intent notificationIntent = new Intent(context.getApplicationContext(), MainActivity.class);
    notificationIntent.putExtra("alerts", alerts);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(context, new Random().nextInt(),
            notificationIntent, 0);

    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);

    Notification notification = new NotificationCompat.Builder(context)
            .setContentTitle(context.getString(R.string.app_name))
            .setContentText("Alert received")
            .setSmallIcon(R.drawable.nubeazul)
            .setOnlyAlertOnce(true)
            .setContentIntent(pendingIntent)
            .setWhen(System.currentTimeMillis())
            .setGroup(GRUPO_ALERTAS)
            .setGroupSummary(true)
            .setAutoCancel(true)
            .build();

    //notificationManager.notify(0, notification);
    notificationManager.notify (new Random().nextInt(), notification);
}

所以,现在,每一个都是单独显示的,如果它们累积起来,结果相当丑陋,所有通知栏都充满了小图标。你们可以帮助一个优雅的解决方案,因为我是Android新手吗?非常感谢! enter image description here enter image description here

今天新增加的东西!

如果我将通知随机输出,留下类似notificationManager.notify(0, notification);的内容,我只会收到一个通知,但没有别的,那么当它启动MainActivity(它的onResume()方法)时,它只会显示一个通知,所有"堆积的"只需在单个通知上单击时丢弃。我想要实现的是,在保持一个干净的显示,即:所有GCM的一个组通知,如果我点击该组,我将通过Alerts.class显示每个通知(类似于循环通知,并为每个人启动活动警报。

   @Override
protected void onResume()
{
    super.onResume();

    if (getIntent().hasExtra("alerts"))
    {
        Bundle extras = getIntent().getExtras();
        Intent intent = new Intent(this, Alerts.class);
        intent.putExtra("alerts" , extras.getString("alerts"));
        startActivity(intent);
        getIntent().removeExtra("alerts");
    }
}

然后,Alerts类将很好地显示它所执行的警报,但每个通知都会显示一个。

1 个答案:

答案 0 :(得分:0)

所以我尝试了你的代码并设法重现你遇到的问题(我只是手动创建了虚拟通知)。所以Notification s堆积的原因是因为你在notificationManager.notify()传递的id彼此不同。至于到目前为止我在NotificationNotificationManager行为上观察到的内容,notify()中指示的ID表示id位置/位置(不知道该叫什么) Notification下的NotificationManager,而不是Notification本身的ID。

NotificationManager想象成一个数组或列表。例如,如果状态栏上有3个可见通知:

  

Notification 1Notification 2Notification 3及其ID如下:0,1,2。

如果您生成 Notification 4,然后调用notify将其作为参数传递,并将id 1作为当前显示在{{1会产生这样的结果:

  

NotificationManagerNotification 1Notification 4及其ID如下:0,1,2。

因此,您发送通知并且不进行分组的原因是,在传递Notification 3时调用notify()时,您最终会遇到不同的ID。

根据我认为你的目标行为 - 将你的应用程序的通知加入到一个 - 实现在理解时很简单,但我认为它仍然有点棘手。如果已经有超过1个通知,则必须首先检查,如果是,则创建包含详细信息的摘要通知,并单独显示(介意ID;) )以及所有其他的东西。我发现这个blog虽然我认为可以帮助你。或者您只需查看Stacking Notifications上的官方文档。

因此,当涉及到应用通知时,只需使用一个ID传入new Random().nextInt()。希望这可以帮助。干杯! :d