Tworzenie grupy powiadomień

Począwszy od Androida 7.0 (interfejs 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 się zwijały.

Aby zapewnić obsługę starszych wersji, dodaj wyświetlane samo powiadomienie z podsumowaniem wszystkich poszczególnych powiadomień. Najlepiej zrobić to za pomocą powiadomień w stylu skrzynki odbiorczej.

Rysunek 1. Zwinięte (u góry) i rozwinięte (u dołu) grupy powiadomień.

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

  • Powiadomienia podrzędne są pełnymi powiadomieniami i mogą być wyświetlane indywidualnie bez potrzeby tworzenia podsumowania grupowego.

  • Poszczególne powiadomienia podrzędne mają jedną z korzyści. Przykład:

    • Są to działania, które można podjąć w odniesieniu do każdego powiadomienia.

    • W powiadomieniu użytkownik zobaczy więcej informacji.

Jeśli Twoje powiadomienia nie spełniają powyższych kryteriów, rozważ zaktualizowanie istniejącego powiadomienia o nowe informacje lub utworzenie powiadomienia w formie wiadomości, aby wyświetlać kilka aktualizacji w tej samej rozmowie.

Tworzenie grupy i dodawanie do niej powiadomienia

Aby utworzyć grupę powiadomień, zdefiniuj dla niej unikalny ciąg identyfikatora. Następnie w przypadku każdego powiadomienia, które chcesz wysłać w grupie, wywołaj funkcję setGroup(), podając 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ć kolejność, wywołując metodę setSortKey().

Jeśli alerty dla grupy powiadomień muszą być obsługiwane przez inne powiadomienie, wywołaj funkcję setGroupAlertBehavior(). Jeśli na przykład chcesz, aby tylko podsumowanie grupy wydawało dźwięk, wszystkie elementy grupy muszą mieć włączone alerty grupowe GROUP_ALERT_SUMMARY. Inne opcje to: GROUP_ALERT_ALL i GROUP_ALERT_CHILDREN.

Ustawianie podsumowania grupy

Powiadomienia zgrupowane muszą zawierać dodatkowe powiadomienie działające jako podsumowanie grupy. Aby włączyć powiadomienia grupowane, musisz ustawić podsumowanie grupowe. To podsumowanie grupy musi zawierać część tekstu z każdej innej powiadomienia w grupie, aby ułatwić użytkownikowi zrozumienie, co się w niej znajduje. 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 o podsumowaniu grupy, a pozostałe ukrywa. Użytkownik może kliknąć powiadomienie z podsumowaniem grupy, aby otworzyć aplikację.

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

Nawet jeśli nowsze wersje Androida nie wyświetlają tekstu podsumowania grupy, który został przez Ciebie zaprojektowany, musisz zawsze ręcznie ustawić podsumowanie, aby umożliwić grupowanie powiadomień. Działanie podsumowania grupy może się różnić w zależności od niektórych typów urządzeń, np. urządzeń do noszenia. Ustawienie rozszerzonych treści w podsumowaniu grupy pomaga zapewnić jak najlepsze wrażenia na wszystkich urządzeniach i w różnych wersjach.

Aby dodać podsumowanie grupy:

  1. Utwórz nowe powiadomienie z opisem grupy. Najlepiej zrobić to za pomocą powiadomienia w stylu skrzynki odbiorczej.

  2. Dodaj do grupy powiadomienie podsumowujące, wywołując funkcję setGroup().

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

Przykładowy kod służący do 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 musi pozostać taki sam, aby powiadomienie było publikowane tylko raz. Dzięki temu możesz go później zaktualizować, jeśli informacje w podsumowaniu ulegną zmianie. Kolejne dodatki do grupy muszą spowodować zaktualizowanie istniejącego podsumowania.

Przykładowy kod, który korzysta z powiadomień, znajdziesz w przykładowym kodzie Powiadomienia na Androidzie.

Automatyczne grupowanie

Jeśli na urządzeniu z Androidem 7.0 (poziom interfejsu API 24) lub nowszym aplikacja wysyła powiadomienia, ale nie określa klucza grupy ani podsumowania grupy, system może automatycznie je grupować. Pogrupowane powiadomienia wyświetlają się automatycznie wraz z powiadomieniem z podsumowaniem dotyczącym grupy, które jest oznaczone fragmentami tekstu z niektórych powiadomień w grupie. Użytkownik może rozwinąć to powiadomienie podsumowania, aby wyświetlić poszczególne powiadomienia, tak jak w przypadku powiadomień pogrupowanych ręcznie.

Sposób automatycznego grupowania może się różnić w zależności od typu urządzenia. Aby zapewnić jak najlepsze działanie na wszystkich urządzeniach i we wszystkich wersjach, jeśli wiesz, że powiadomienia muszą być grupowane, określ klucz grupy i podsumowanie grupy, aby były one grupowane.