0

Ich habe die folgende Benachrichtigungslogik innerhalb einer Klasse, die GcmListenerService erweitert, und wird aufgerufen, wenn eine Benachrichtigung eintrifft. Wenn Sie darauf klicken, gelangen Sie über die App zu MainActivity, wo die Benachrichtigung ordnungsgemäß angezeigt wird.Stapeln von Benachrichtigungen von GCM funktioniert nicht mit setGroup

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

So, jetzt wird jeder separat angezeigt, und wenn sie aufbauen, ist das Ergebnis ziemlich hässlich mit all der Benachrichtigungsleiste voll von kleinen Icons. Kannst du mir helfen, eine elegante Lösung zu finden, seit ich Android neu kenne? Danke vielmals! enter image description here enter image description here

NEW heute Viehfutter beigemengt!

Wenn ich die Zufalls aus benachrichtigen nehmen, so etwas wie notificationManager.notify(0, notification); verlassen, werde ich nur eine Benachrichtigung erhalten, aber sonst nichts, dann, wenn es startet MainActivity (seine onResume() -Methode) wird es nur eine Meldung angezeigt werden und alle "Aufgestapelte" werden einfach verworfen, wenn auf die eine Benachrichtigung geklickt wird. Was ich erreichen möchte ist, dass während ich eine saubere Anzeige halte, dh: eine Gruppenbenachrichtigung für alle GCM, wenn ich auf die Gruppe klicke, werde ich jede Benachrichtigung durch die Alerts.class angezeigt bekommen (etwas wie das Durchlaufen der Benachrichtigungen, und Starten der Aktivität Alerts für jeden.

@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"); 
    } 
} 

Dann wird die Alerts Klasse wird schön die Warnung angezeigt werden, die es der Fall ist, sondern eine pro-Benachrichtigung.

+0

Können Sie einige Screenshots liefern, was Sie bekommen? Stauen sie sich einfach auf? –

+0

Ja, das Symbol der App wird nur für jede Benachrichtigung wiederholt, es ist wie für jede Nachricht, die Sie in Google Mail erhalten, erhalten Sie ein separates Google Mail-Symbol und Benachrichtigung – Javi

+0

Ich werde Ihren Code ausprobieren und Sie wissen lassen, was Ich finde heraus. :) –

Antwort

1

Also versuchte ich den Code aus und verwaltet, um zu sehen zu reproduzieren, was (Sie haben gerade Dummy-Benachrichtigungen manuell erstellt.) Der Grund dafür, dass die Notification s sich anhäuften, war, dass die ID, die Sie übergeben, in notificationManager.notify() diff voneinander getrennt. Was ich bisher auf dem Notification und NotificationManager s-Verhalten beobachtet habe, ist die in notify() angegebene it-Art der ID-Position/Position (nicht sicher, was es zu nennen) der Notification, die unter der NotificationManager ist, keine ID von die Notification selbst.

Stellen Sie sich die NotificationManager als ein Array oder eine Liste vor. Wenn zum Beispiel, haben Sie 3 sichtbare Benachrichtigungen in der Statusleiste:

Notification 1, Notification 2, Notification 3 und ihre IDs sind wie folgt: 0, 1, 2.

Wenn Sie ein neu generierenNotification 4 rief dann notify es als Parameter übergeben, und die ID 1, die Benachrichtigungen, die zur Zeit in der NotificationManager führen so zu etwas würde gezeigt werden:

Notification 1, Notification 4, Notification 3 und ihre IDs sind wie folgt: 0, 1, 2.

So ist der Grund, dass Sie Benachrichtigungen sind häufen sich und NICHT zusammen Gruppierung ist, weil Sie mit unterschiedlichen IDs enden, wenn Rufen notify() während new Random().nextInt() übergeben.

Nach dem Verhalten, das ich denke, Sie zielen darauf ab - die Benachrichtigungen von Ihrer App in eins - die Umsetzung ist einfach, wenn verstanden, aber ich denke, es ist immer noch ein bisschen schwierig. Es ist so, als ob Sie zuerst prüfen müssen, ob es bereits mehr als eine Benachrichtigung gibt. Wenn ja, erstellen Sie eine Zusammenfassungsbenachrichtigung mit den Details und Sie zeigen sie allein (beachten Sie die ID;)) und all diese anderen Dinge. Ich habe dieses blog gefunden, obwohl ich denke, dass es Ihnen dabei helfen könnte. Oder Sie können einfach die offiziellen Dokumente auf Stacking Notifications überprüfen.

Also unter dem Strich, verwenden Sie einfach eine einzige ID, um notify() übergeben, wenn es um Ihre Apps Benachrichtigungen kommt. Hoffe das hilft. Prost! : D

+0

Ich habe mehr Informationen hinzugefügt, da ich die Lösung nicht sehe. Danke vielmals! – Javi

+0

Sah das neue Zeug. Das Verhalten, das Sie anstreben, erfordert weitere Codierung, wie ich oben erwähnt habe. Versuchen Sie, den Blog, den ich verlinkt habe, zu sehen. Ich denke, sie haben ein einfaches Beispiel, das Sie ausprobieren können, um es anschließend zu ändern. Prost! :) –

Verwandte Themen