2014-12-05 3 views
7

Мне нужно сформировать группу уведомлений. Я сделал пример enter link description hereУкладка Уведомления не работают

но мое уведомление не сгруппировано. что я сделал не так?

мой код:

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

вызов метода:

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

EDIT, полный код: Это моя служба, которую я генерировать уведомления

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

Я думаю, что вы каждый раз инициализировать новый экземпляр NotificationManagerCompat поэтому попробуйте инициализировать только одноразовую из стороны generateNotification(). –

+0

может быть глупо, но я не могу. Открытый класс GCMIntentService расширяет 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()); –

ответ

0

Попробуйте инициализировать NotificationManagerCompat в generateNotification если экземпляр NotificationManagerCompat имеет значение null d удалить конструктор по умолчанию для кода инициализации:

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

Да Ошибка была удалена, но уведомление все еще не сгруппировано ( –

6

Необходимо создать сводное уведомление с информацией из предыдущего. Это краткое уведомление, которое видно, а не предыдущее. Это что-то вроде этого:

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

Пожалуйста, обратитесь к документации в Add a Summary Notification

+2

Как вы можете получить информацию из предыдущего уведомления? – Lion789

+0

Извините за мой плохой английский. Я имею в виду «подробности о предыдущем», а не «от предыдущего», Вы определяете, как это сделать, я обычно сохраняю данные в базе данных. –

Смежные вопросы