2014-12-05 23 views
7

Ich muss eine Gruppe von Benachrichtigungen bilden. Ich machte das Beispiel enter link description hereStacking Notifications funktioniert nicht

aber meine Nachricht sind nicht gruppiert. was habe ich falsch gemacht?

mein Code:

private static int id =0; 
    final static String GROUP_KEY_GUEST = "group_key_guest"; 


    private static void generateNotification(Context context, String message) { 

      NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); 

      Intent intent = new Intent(context,MyActivity.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

      Notification notification = new NotificationCompat.Builder(context) 
        .setContentIntent(pendingIntent) 
        .setSmallIcon(R.drawable.ic_stat_gcm) 
        .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm)) 
        .setTicker("New Message") 
        .setWhen(System.currentTimeMillis()) 
        .setAutoCancel(true) 
        .setContentTitle("Message") 
        .setContentText(message) 
        .setGroup(GROUP_KEY_GUEST) 
        .build(); 

      notificationManager.notify(id++, notification); 
     } 

Methodenaufruf:

@Override 
    protected void onMessage(Context context, Intent intent) { 
     Log.d(TAG, "Поступило сообщение: " + intent.getExtras()); 
     String message = intent.getStringExtra("content"); 
     generateNotification(context, message); 
    } 

EDIT, vollständige Code: Dies ist mein Dienst, den ich Benachrichtigungen generieren

package com.managment.pavel.managmentgradle; 

    public class GCMIntentService extends GCMBaseIntentService { 
     private static int id =0; 
     final static String GROUP_KEY_GUEST = "group_key_guest"; 
     NotificationManagerCompat notificationManager; 
     public GCMIntentService() { 
      super(SENDER_ID); 
     notificationManager = NotificationManagerCompat.from(getApplicationContext()); 
     } 

     @Override 
     protected void onMessage(Context context, Intent intent) { 
      String message = intent.getStringExtra("content"); 
      generateNotification(context, message); 
     } 

     @Override 
     protected void onError(Context context, String s) { 
      Toast.makeText(context,"Error",Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     protected void onRegistered(Context context, String registrationId) { 
      ServerUtilities.register(context, registrationId); 
     } 

     @Override 
     protected void onUnregistered(Context context, String registrationId) { 
      ServerUtilities.unregister(context, registrationId); 
     } 

     private void generateNotification(Context context, String message) { 
      Intent intent = new Intent(context,MyActivity.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

      Notification notification = new NotificationCompat.Builder(context) 
        .setContentIntent(pendingIntent) 
        .setSmallIcon(R.drawable.ic_stat_gcm) 
        .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm)) 
        .setTicker("Новое сообщение") 
        .setWhen(System.currentTimeMillis()) 
        .setAutoCancel(true) 
        .setContentTitle("Сообщение") 
        .setContentText(message) 
        .setGroup(GROUP_KEY_GUEST) 
        .build(); 

      notificationManager.notify(id++, notification); 
     } 
    } 
+0

Ich glaube, Sie jedes Mal neue Instanz von NotificationManagerCompat initialisieren so versuchen initialisieren nur ONETIME out Seite generateNotification(). –

+0

vielleicht dumm, aber ich kann nicht. Öffentliche Klasse GCMIntentService erweitert GCMBaseIntentService { private static int id = 0; letzte statische Zeichenfolge GROUP_KEY_GUEST = "group_key_guest"; NotificationManagerCompat notificationManager; public GCMIntentService() { Super (SENDER_ID); notificationManager = NotificationManagerCompat.from (getApplicationContext()); } –

Antwort

0

Versuchen initialisieren NotificationManagerCompat in generateNotification Wenn die NotificationManagerCompat-Instanz null ist, d Initialisierungscode Form Standardkonstruktors entfernen:

private void generateNotification(Context context, String message) { 
    if(notificationManager==null){ 
     notificationManager = NotificationManagerCompat.from(context); 
    } 

    Intent intent = new Intent(context,MyActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    Notification notification = new NotificationCompat.Builder(context) 
    .setContentIntent(pendingIntent) 
    .setSmallIcon(R.drawable.ic_stat_gcm) 
    .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm)) 
    .setTicker("Новое сообщение") 
    .setWhen(System.currentTimeMillis()) 
    .setAutoCancel(true) 
    .setContentTitle("Сообщение") 
    .setContentText(message) 
    .setGroup(GROUP_KEY_GUEST) 
    .build(); 
    notificationManager.notify(id++, notification); 
} 
+0

Ja Fehler war weg, aber der Hinweis noch nicht gruppiert ( –

6

Sie müssen eine Zusammenfassung der Anmeldung mit Details aus dem vorherigen zu erstellen. Es ist diese zusammenfassende Benachrichtigung sichtbar, nicht die vorherige. Es ist so etwas wie folgt aus:

private static int id =0; 
private static int unread_notif = 0; 
final static String GROUP_KEY_GUEST = "group_key_guest"; 

private static void generateNotification(Context context, String message) { 

     NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); 

     Intent intent = new Intent(context,MyActivity.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

     Notification notification = new NotificationCompat.Builder(context) 
       .setContentIntent(pendingIntent) 
       .setSmallIcon(R.drawable.ic_stat_gcm) 
       .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm)) 
       .setTicker("New Message") 
       .setWhen(System.currentTimeMillis()) 
       .setAutoCancel(true) 
       .setContentTitle("Message") 
       .setContentText(message) 
       .setGroup(GROUP_KEY_GUEST) 
       .build(); 

     notificationManager.notify(id++, notification); 

     unread_notif++; 

     if (unread_notif>1) { 
      Notification summaryNotification = new NotificationCompat.Builder(mContext) 
       .setContentTitle("Your summary message") 
       .setSmallIcon(R.drawable.ic_small_icon) 
       .setLargeIcon(largeIcon) 
       .setStyle(new NotificationCompat.InboxStyle() 
        .addLine("Details about your first notification") 
        .addLine("Details about your second notification") 
       .setBigContentTitle(Integer.toString(unread_notif)+" new notifications") 
       .setSummaryText("More details in app")) 
       .setGroup(GROUP_KEY_GUEST) 
       .setGroupSummary(true) 
       .build(); 

      notificationManager.notify(id++, summaryNotification); 
     } 
    } 

Bitte beachten Sie die Dokumentation in Add a Summary Notification

+2

Wie greifen Sie die Details aus der vorherigen Benachrichtigung? – Lion789

+0

Sorry für mein schlechtes Englisch. Ich meine "Details über das vorherige", nicht "aus dem vorherigen" Sie definieren, wie es geht, ich behalte normalerweise die Daten in der Datenbank bei. –