Crea un gruppo di notifiche

A partire da Android 7.0 (livello API 24), puoi visualizzare le notifiche correlate in un gruppo. Ad esempio, se l'app mostra notifiche per le email ricevute, inserisci tutte le notifiche per i nuovi messaggi email dello stesso gruppo in modo che vengano compressi in sinergia.

Per supportare le versioni precedenti, aggiungi una notifica di riepilogo che appare da sola a riassume tutte le singole notifiche. Questa operazione viene spesso eseguita meglio notifica in stile casella di posta.

Figura 1. Uno stato compresso (in alto) ed espanso (in basso) gruppo di notifica.

Utilizza i gruppi di notifica se tutte le seguenti condizioni sono vere per il tuo utilizzo case:

  • Le notifiche per bambini sono notifiche complete e possono essere visualizzate singolarmente senza bisogno di un riepilogo del gruppo.

  • Presentare le notifiche di tuo figlio singolarmente ha un vantaggio. Per esempio:

    • Sono gestibili, con azioni specifiche per ciascuna notifica.

    • Ogni notifica contiene ulteriori informazioni che l'utente può vedere.

Se le notifiche non soddisfano i criteri precedenti, valuta la possibilità di aggiornando una notifica esistente con nuove informazioni o la creazione di uno stile di comunicazione notifica per mostrare più aggiornamenti nella stessa conversazione.

Creare un gruppo e aggiungere una notifica

Per creare un gruppo di notifica, definisci una stringa di identificatore univoca per il gruppo. Per ogni notifica che vuoi includere nel gruppo, chiama setGroup(), passando il nome del gruppo. Ad esempio:

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

Per impostazione predefinita, le notifiche sono ordinate in base a quando vengono pubblicate, ma può modificare l'ordine chiamando setSortKey()

Se gli avvisi per il gruppo di una notifica devono essere gestiti da un notifica, chiamata setGroupAlertBehavior() Ad esempio, se vuoi che solo il riepilogo del tuo gruppo faccia rumore, i minori nel gruppo devono avere il comportamento di avviso di gruppo GROUP_ALERT_SUMMARY. Le altre opzioni sono GROUP_ALERT_ALL e GROUP_ALERT_CHILDREN.

Impostare un riepilogo del gruppo

Le notifiche raggruppate devono avere una notifica aggiuntiva che agisca come gruppo riassunto. Per attivare le notifiche raggruppate, devi impostare un riepilogo del gruppo. Questo il riepilogo del gruppo deve includere parte del testo di ciascuna delle altre notifiche del gruppo per aiutare l'utente a capire cosa fa parte del gruppo. In che modo il gruppo il riepilogo visualizzato dipende dalla versione di Android:

  • Su versioni di Android precedenti alla 7.0 (livello API 24), che non possono mostrare gruppo di notifiche, il sistema mostra solo il riepilogo del gruppo notifica e nasconde tutti gli altri. L'utente può toccare il riepilogo del gruppo per aprire l'app.

  • Su Android 7.0 e versioni successive, il sistema mostra la notifica di riepilogo del gruppo come gruppi nidificati di notifiche, etichettati con snippet di testo di ogni raggruppata. Non mostra il testo che hai impostato per il gruppo notifica di riepilogo. L'utente può espandere il gruppo nidificato di notifiche per visualizzare le singole notifiche del gruppo, come mostrato nella figura 1.

Anche se le versioni più recenti di Android non mostrano il testo di riepilogo design, devi sempre impostare manualmente un riepilogo per abilitare notifiche. Il comportamento del riepilogo del gruppo potrebbe variare su alcuni dispositivi di archiviazione, come gli indossabili. L'impostazione di contenuti avanzati nel riepilogo del gruppo è utile per offrire la migliore esperienza possibile su tutti i dispositivi e le versioni.

Per aggiungere un riepilogo del gruppo, procedi come segue:

  1. Crea una nuova notifica con una descrizione del gruppo (spesso l'opzione migliore) con la funzione di stile della casella di posta di notifica.

  2. Aggiungi la notifica di riepilogo al gruppo chiamando il numero setGroup().

  3. Specifica che deve essere utilizzato come riepilogo del gruppo chiamando setGroupSummary(true)

Il codice seguente mostra un esempio di creazione di un riepilogo del gruppo:

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

L'ID notifica di riepilogo deve rimanere invariato in modo che venga pubblicato solo una volta e in modo da poterle aggiornare in un secondo momento se le informazioni di riepilogo cambiano. Successiva aggiunte al gruppo devono comportare l'aggiornamento del riepilogo esistente.

Per un esempio di codice che utilizza le notifiche, consulta Notifiche Android Esempio di Google.

Raggruppamento automatico

Su Android 7.0 (livello API 24) e versioni successive, se la tua app invia quattro o più notifiche e non specifica una chiave di gruppo o un riepilogo del gruppo, il sistema potrebbe le raggruppa automaticamente. Le notifiche raggruppate vengono visualizzate automaticamente con una notifica di riepilogo del gruppo etichettata con snippet di testo di alcuni le notifiche raggruppate. L'utente può espandere questa notifica di riepilogo per visualizzare singola notifica, come per le notifiche raggruppate manualmente.

Il comportamento del raggruppamento automatico potrebbe variare su alcuni tipi di dispositivi. Per offrire il meglio su tutti i dispositivi e le versioni, se sai che le notifiche devono essere raggruppati, specifica una chiave e un riepilogo del gruppo per assicurarti che siano raggruppati.