Tworzenie grupy powiadomień

Począwszy od Androida w wersji 7.0 (poziom interfejsu API 24) możesz wyświetlać powiązane powiadomienia w grupę. 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 je zwinąć razem.

Aby zapewnić obsługę starszych wersji, dodaj powiadomienie z podsumowaniem, które będzie wyświetlane podsumuj wszystkie powiadomienia. Najlepiej zrobić to za pomocą polecenia powiadomienia w stylu skrzynki odbiorczej.

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

Użyj grup powiadomień, jeśli wszystkie z tych warunków są spełnione przypadek:

  • Powiadomienia podrzędne to pełne powiadomienia i mogą być wyświetlane z osobna, bez potrzeby tworzenia podsumowania grupowego.

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

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

    • Każde powiadomienie zawiera więcej informacji, które użytkownik może zobaczyć.

Jeśli powiadomienia nie spełniają powyższych kryteriów, rozważ zmienianie istniejącego powiadomienia na nowe informacje lub utworzenie stylu wiadomości powiadomienie do wyświetlenia wiele aktualizacji w tej samej rozmowie.

Tworzenie grupy i dodawanie do niej powiadomień

Aby utworzyć grupę powiadomień, określ dla niej unikalny identyfikator. Następnie dla każdego powiadomienia, które chcesz dodać do grupy, zadzwoń pod setGroup() i przekazywanie jej nazwy. 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 mogą zmienić kolejność, dzwoniąc do setSortKey()

Jeśli alerty grupy powiadomień muszą być obsługiwane przez inną osobę powiadomienie, połączenie setGroupAlertBehavior() Jeśli na przykład chcesz, aby tylko podsumowanie dotyczące grupy zostało uwzględnione, elementy podrzędne w grupie muszą mieć zachowanie alertu grupy GROUP_ALERT_SUMMARY Pozostałe opcje to GROUP_ALERT_ALL oraz GROUP_ALERT_CHILDREN

Konfigurowanie podsumowania dotyczącego grupy

Powiadomienia zgrupowane muszą zawierać dodatkowe powiadomienie działające jako grupa . Aby włączyć powiadomienia zgrupowane, musisz skonfigurować podsumowanie grupy. Ten podsumowanie grupy musi zawierać tekst poszczególnych powiadomień aby użytkownik wiedział, co należy do grupy. W jaki sposób grupa wyświetlane podsumowanie 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żonych system wyświetla tylko podsumowanie dotyczące grupy, i ukryje wszystkie pozostałe. Użytkownik może kliknąć podsumowanie dotyczące grupy powiadomienie o otwarciu aplikacji.

  • W Androidzie 7.0 i nowszych system wyświetla powiadomienie z podsumowaniem dotyczącym grupy. jako zagnieżdżoną grupę powiadomień oznaczonych etykietami z fragmentami tekstu powiadomienie grupowane. nie wyświetla tekstu ustawionego w grupie, powiadomienia o podsumowaniu. Użytkownik może rozwinąć zagnieżdżoną grupę powiadomień. aby zobaczyć poszczególne powiadomienia w grupie, tak jak na ilustracji 1.

Nawet jeśli nowsze wersje Androida nie wyświetlają tekstu podsumowania grupy, projektowania, 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 urządzenia takich jak urządzenia do noszenia. Ustawienie szczegółowych treści w podsumowaniu grupy pomaga zapewniają najlepsze wrażenia na wszystkich urządzeniach i we wszystkich wersjach.

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

  1. Utwórz nowe powiadomienie z opisem grupy – często najlepiej jest, w stylu skrzynki odbiorczej .

  2. Dodaj do grupy powiadomienie o podsumowaniu, dzwoniąc pod numer setGroup().

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

Ten kod pokazuje 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 musi pozostać taki sam, aby została opublikowana tylko raz oraz dzięki czemu możesz zaktualizować je później, gdy podsumowanie ulegnie zmianie. Kolejna dodania do grupy muszą spowodować zaktualizowanie istniejącego podsumowania.

Przykładowy kod, który korzysta z powiadomień, znajdziesz w sekcji Powiadomienia na Androida Przykład ,

Automatyczne grupowanie

Na Androidzie 7.0 (poziom interfejsu API 24) i nowszych, jeśli aplikacja wysyła co najmniej 4 powiadomień i nie określa klucza ani podsumowania grupy, system może automatycznie je grupować. Automatycznie grupowane powiadomienia zawierające powiadomienie o podsumowaniu grupy oznaczone fragmentami tekstu pochodzącymi pogrupowane powiadomienia. Użytkownik może rozwinąć to powiadomienie z podsumowaniem, aby zobaczyć wszystkie dla pojedynczych powiadomień, tak jak w przypadku powiadomień grupowanych ręcznie.

Działanie automatycznego grupowania może się różnić w zależności od typu urządzenia. Aby zapewnić jak najlepsze na wszystkich urządzeniach i w każdej wersji, jeśli wiesz, że powiadomienia muszą dla grupowania, określ klucz grupy i podsumowanie grup, aby mieć pewność, że są one zgrupowane.