Как группировать андроидные уведомления, например whatsapp?

Я не знаю, как группировать два или более уведомлений только в одном и показывать сообщение типа "У вас есть два новых сообщения".

Ответы

Ответ 1

Шаги, которые следует соблюдать по приведенному ниже коду.

NotificationCompat.Builder:contains the UI specification and action information
NotificationCompat.Builder.build() :used to create notification (Which returns Notification object)
Notification.InboxStyle: used to group the notifications belongs to same ID
NotificationManager.notify():to issue the notification.

Используйте приведенный ниже код, чтобы создать уведомление и сгруппировать его. Включите функцию нажатием кнопки.

private final int NOTIFICATION_ID = 237;
private static int value = 0;
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.push_notify_icon);
public void buttonClicked(View v)
{
        value ++;
        if(v.getId() == R.id.btnCreateNotify){
            NotificationManager nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            Notification.Builder builder = new Notification.Builder(this);            
            builder.setContentTitle("Lanes");
            builder.setContentText("Notification from Lanes"+value);
            builder.setSmallIcon(R.drawable.ic_launcher);
            builder.setLargeIcon(bitmap);
            builder.setAutoCancel(true);
            inboxStyle.setBigContentTitle("Enter Content Text");
            inboxStyle.addLine("hi events "+value);
            builder.setStyle(inboxStyle);
            nManager.notify("App Name",NOTIFICATION_ID,builder.build());
        }
}

Для отдельных уведомлений назначьте разные NOTIFICATION_IDs.

Ответ 2

Для полной логики, пожалуйста, рассмотрите вопрос о моем ответе. Я использовал логику с общими предпочтениями и широковещательным приемником, поскольку мне нужно было сгруппировать каждое сообщение пользователя в единое целое и быть в поле зрения активных уведомлений. Как только, нацелившись на уровень api 23, вы может получать активные уведомления, мне это совсем не помогло. Так что я решил написать небольшую логику. Проверьте это здесь, если вам хочется.

fooobar.com/questions/194894/...

Ответ 3

Вам необходимо создать уведомление, чтобы его можно было обновить с помощью идентификатора уведомления, вызвав NotificationManager.notify(ID, notification).

Чтобы обновить уведомление, необходимо создать следующие шаги:

  • Обновить или создать объект NotificationCompat.Builder
  • Создайте объект уведомления из него
  • Выдать уведомление с тем же идентификатором, который вы использовали ранее

Пример, взятый из документации разработчика Android:

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// Sets an ID for the notification, so it can be updated
int notifyID = 1;

mNotifyBuilder = new NotificationCompat.Builder(this)
    .setContentTitle("New Message")
    .setContentText("You've received new messages.")
    .setSmallIcon(R.drawable.ic_notify_status)
numMessages = 0;

// Start of a loop that processes data and then notifies the user
...
mNotifyBuilder.setContentText(currentText).setNumber(++numMessages);

// Because the ID remains unchanged, the existing notification is updated.
mNotificationManager.notify(notifyID, mNotifyBuilder.build());
...

Также см. документы Android о Stacking Notifications https://developer.android.com/training/wearables/notifications/stacks.html