Tworzenie grupy powiadomień

Od Androida 7.0 (poziom interfejsu API 24) możesz wyświetlać powiązane powiadomienia w grupie. Jeśli na przykład aplikacja wyświetla powiadomienia o otrzymanych e-mailach, umieść wszystkie powiadomienia o nowych e-mailach w tej samej grupie, aby wszystkie powiadomienia były zwijane.

Aby umożliwić obsługę starszych wersji, dodaj powiadomienie podsumowujące, które będzie się wyświetlać osobno. Najlepiej zrobić to za pomocą powiadomień w stylu skrzynki odbiorczej.

Rysunek 1. zwiniętą (u góry) i rozwiniętą (u dołu) grupę powiadomień.

Użyj grup powiadomień, jeśli w Twoim przypadku są spełnione wszystkie te warunki:

  • Powiadomienia podrzędne są kompletne i można je wyświetlać pojedynczo, bez podsumowania grupy.

  • Indywidualne wyświetlanie powiadomień dla dzieci wiąże się z korzyścią. Przykład:

    • Służą one do konkretnych działań i podejmują działania związane z każdym z nich.

    • Każde powiadomienie zawiera więcej informacji dla użytkownika.

Jeśli powiadomienia nie spełniają powyższych kryteriów, rozważ zaktualizowanie istniejącego powiadomienia o nowe informacje lub utworzenie powiadomienia w stylu wiadomości, które będzie wyświetlać wiele aktualizacji w jednym wątku.

Tworzenie grupy i dodawanie do niej powiadomień

Aby utworzyć grupę powiadomień, zdefiniuj jej unikalny ciąg identyfikatora. Następnie w przypadku każdego powiadomienia, które chcesz dodać do grupy, wywołaj metodę setGroup() i przekaż nazwę grupy. Na przykład:

Kotlin

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

Java

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Domyślnie powiadomienia są sortowane według daty opublikowania, ale możesz zmienić ich kolejność, wywołując metodę setSortKey().

Jeśli alerty dotyczące grupy powiadomień muszą być obsługiwane przez inne powiadomienie, wywołaj metodę setGroupAlertBehavior(). Jeśli na przykład chcesz, by tylko podsumowanie grupy wydawało szum, wszystkie elementy podrzędne w grupie muszą działać w trybie alertu grupowego GROUP_ALERT_SUMMARY. Pozostałe opcje to GROUP_ALERT_ALL i GROUP_ALERT_CHILDREN.

Konfigurowanie podsumowania grupy

Pogrupowane powiadomienia muszą zawierać dodatkowe powiadomienie, które działa jako podsumowanie grupy. Aby włączyć zgrupowane powiadomienia, musisz ustawić podsumowanie grupy. Podsumowanie grupy musi zawierać część tekstu z pozostałych powiadomień w grupie, aby użytkownik mógł zrozumieć zawartość grupy. Sposób wyświetlania podsumowania grupy zależy od wersji Androida:

  • Na urządzeniach z Androidem w wersjach starszych niż 7.0 (poziom interfejsu API 24), które nie mogą wyświetlać zagnieżdżonej grupy powiadomień, system wyświetla tylko powiadomienie z podsumowaniem grupy, a wszystkie pozostałe ukrywa. Użytkownik może kliknąć powiadomienie z podsumowaniem grupy, aby otworzyć aplikację.

  • W Androidzie 7.0 i nowszych system wyświetla powiadomienia z podsumowaniem grupy jako zagnieżdżoną grupę powiadomień, oznaczone fragmentami tekstu z każdego zgrupowanego powiadomienia. Nie wyświetla tekstu ustawionego w powiadomieniu z podsumowaniem grupy. Użytkownik może rozwinąć zagnieżdżoną grupę powiadomień, aby zobaczyć poszczególne powiadomienia w tej grupie, jak widać na ilustracji 1.

Nawet jeśli nowsze wersje Androida nie wyświetlają stworzonego przez Ciebie tekstu podsumowania grupy, zawsze musisz ręcznie ustawić podsumowanie, aby włączyć zgrupowane powiadomienia. Działanie podsumowania grupy może się różnić w zależności od typu urządzeń, np. urządzeń do noszenia. Ustawienie szczegółowych treści w podsumowaniu grupy pomaga zapewnić optymalne działanie na wszystkich urządzeniach i w różnych wersjach.

Aby dodać podsumowanie grupy, wykonaj te czynności:

  1. Utwórz nowe powiadomienie z opisem grupy. Najlepiej zrobić to często z powiadomieniem w stylu skrzynki odbiorczej.

  2. Dodaj powiadomienie z podsumowaniem do grupy, dzwoniąc pod numer setGroup().

  3. Określ, że ma ona być używana jako podsumowanie grupy, wywołując metodę setGroupSummary(true).

Oto przykład tworzenia podsumowania grupy:

Kotlin

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg Check this out")
                .addLine("Jeff Chang Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

Java

// Use constant ID for notifications used as group summary.
int SUMMARY_ID = 0;
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification1 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(new NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg  Check this out")
                .addLine("Jeff Chang    Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build();

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

Identyfikator powiadomienia o podsumowaniu nie może się zmieniać, aby był publikowany tylko raz i można go było zaktualizować później, gdy informacje podsumowujące się zmienią. Kolejne zmiany w grupie muszą skutkować aktualizacją bieżącego podsumowania.

Przykładowy kod, który korzysta z powiadomień, znajdziesz w tym artykule.

Automatyczne grupowanie

Jeśli na Androidzie 7.0 (poziom interfejsu API 24) i nowszych aplikacja wysyła co najmniej 4 powiadomienia, ale nie ma określonego klucza grupy ani podsumowania grupy, system może je automatycznie zgrupować. Pogrupowane powiadomienia są wyświetlane automatycznie z podsumowaniem grupy oznaczonym fragmentami tekstu z niektórych zgrupowanych powiadomień. Użytkownik może rozwinąć to powiadomienie z podsumowaniem, aby zobaczyć poszczególne powiadomienia, tak jak w przypadku powiadomień zgrupowanych ręcznie.

Działanie automatycznego grupowania może się różnić w zależności od typu urządzenia. Jeśli wiesz, że powiadomienia muszą być grupowane, aby zapewnić optymalny komfort korzystania z usługi na wszystkich urządzeniach i w każdej wersji, określ klucz grupy i podsumowanie grupy, aby mieć pewność, że będą pogrupowane.