Crea una notifica espandibile

Una notifica di base di solito include un titolo, una riga di testo e le azioni che l'utente può eseguire in risposta. Per fornire ulteriori informazioni, puoi creare notifiche di grandi dimensioni ed espandibili applicando uno dei diversi modelli di notifica, come descritto in questo documento.

Per iniziare, crea una notifica con tutti i contenuti di base, come descritto in Crea una notifica. Poi, chiama setStyle() con un oggetto di stile e fornisci le informazioni corrispondenti a ogni modello, come mostrato negli esempi seguenti.

Aggiungi un'immagine grande

Per aggiungere un'immagine alla notifica, passa un'istanza di NotificationCompat.BigPictureStyle a setStyle().

var notification =
    NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo)
        .setContentTitle("Title")
        .setContentText("Content text")
        .setStyle(
            NotificationCompat.BigPictureStyle()
                .bigPicture(bitmapImage)
        )
        .build()

Per fare in modo che l'immagine venga visualizzata come miniatura solo quando la notifica è compressa, come mostrato nella figura seguente, chiama setLargeIcon() e passale l'immagine. Poi, chiama BigPictureStyle.bigLargeIcon() e passa null in modo che l'icona grande scompaia quando la notifica viene espansa:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Title")
    .setContentText("Content text")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigPictureStyle()
            .bigPicture(bitmapImage)
            .bigLargeIcon(null as Bitmap?)
    )
    .build()

Una notifica compressa e una notifica espansa contenente un'immagine blu
Figura 1. Una notifica tramite NotificationCompat.BigPictureStyle.

Aggiungi un grande blocco di testo

Applica NotificationCompat.BigTextStyle per visualizzare il testo nell'area dei contenuti espansa della notifica:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setContentTitle("Sender name")
    .setContentText("Email subject")
    .setLargeIcon(Icon.createWithResource(context, R.drawable.dog))
    .setStyle(
        NotificationCompat.BigTextStyle()
            .bigText(someVeryLongMessage)
    )
    .build()

Una notifica compressa e una notifica espansa che utilizza BigTextStyle
Figura 2. Una notifica tramite NotificationCompat.BigTextStyle.

Crea una notifica in stile Posta in arrivo

Applica NotificationCompat.InboxStyle a una notifica se vuoi aggiungere più righe di riepilogo brevi, ad esempio snippet di email in arrivo. In questo modo, puoi aggiungere più porzioni di testo dei contenuti, ciascuna troncata su una riga, anziché un'unica riga di testo continua fornita da NotificationCompat.BigTextStyle.

Per aggiungere una nuova riga, chiama addLine() fino a sei volte, come mostrato nell'esempio seguente. Se aggiungi più di sei righe, saranno visibili solo le prime sei.

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.mail)
    .setContentTitle("5 New mails from Frank")
    .setContentText("Check them out")
    .setLargeIcon(bitmapImage)
    .setStyle(
        NotificationCompat.InboxStyle()
            .addLine("Re: Planning")
            .addLine("Delivery on its way")
            .addLine("Follow-up")
    )
    .build()

Il risultato è simile alla figura seguente:

Una notifica espansa in stile Posta in arrivo
Figura 3. Una notifica espansa in stile Posta in arrivo.

Mostra una conversazione in una notifica

Applica NotificationCompat.MessagingStyle per visualizzare i messaggi sequenziali tra un numero qualsiasi di persone. Questa opzione è ideale per le app di messaggistica, perché fornisce un layout coerente per ogni messaggio gestendo separatamente il nome del mittente e il testo del messaggio. Inoltre, ogni messaggio può essere composto da più righe.

Per aggiungere un nuovo messaggio, chiama addMessage(), passando il testo del messaggio, l'ora di ricezione e il nome del mittente. Puoi anche passare queste informazioni come oggetto NotificationCompat.MessagingStyle.Message, come mostrato nell'esempio seguente:

val message1 = NotificationCompat.MessagingStyle.Message(
    messages[0].text,
    messages[0].time,
    messages[0].sender
)
val message2 = NotificationCompat.MessagingStyle.Message(
    messages[1].text,
    messages[1].time,
    messages[1].sender
)
notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build())
            .addMessage(message1)
            .addMessage(message2)
    )
    .build()

Una notifica in stile messaggistica
Figura 4. Una notifica tramite NotificationCompat.MessagingStyle.

Quando utilizzi NotificationCompat.MessagingStyle, tutti i valori assegnati a setContentTitle() e setContentText() vengono ignorati.

Puoi chiamare setConversationTitle() per aggiungere un titolo che viene visualizzato sopra la conversazione. Potrebbe trattarsi del nome del gruppo creato dall'utente o, se non ha un nome specifico, di un elenco dei partecipanti alla conversazione. Non impostare un titolo per le chat 1:1, perché il sistema utilizza la presenza di questo campo come indicazione che la conversazione è un gruppo.

Questo stile si applica solo ai dispositivi con Android 7.0 (livello API 24) e versioni successive. Quando utilizzi la libreria di compatibilità (NotificationCompat), come mostrato in precedenza, le notifiche con MessagingStyle vengono automaticamente sostituite con uno stile di notifica espansa supportato.

Quando crei una notifica di questo tipo per una conversazione in chat, aggiungi un'azione di risposta diretta.

Crea una notifica con i controlli multimediali

Applica MediaStyleNotificationHelper.MediaStyle per visualizzare i controlli di riproduzione dei contenuti multimediali e le informazioni sulle tracce.

Specifica il MediaSession associato nel costruttore. In questo modo, Android può visualizzare le informazioni corrette sui tuoi contenuti multimediali.

Chiama addAction() fino a cinque volte per visualizzare fino a cinque pulsanti icona. Chiama setLargeIcon() per impostare la copertina dell'album.

A differenza degli altri stili di notifica, MediaStyle consente anche di modificare la visualizzazione dei contenuti compressi specificando tre pulsanti di azione che vengono visualizzati anche nella visualizzazione compressa. Per farlo, fornisci gli indici dei pulsanti di azione a setShowActionsInCompactView().

L'esempio seguente mostra come creare una notifica con controlli multimediali:

notification = NotificationCompat.Builder(context, CHANNEL_ID)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
    .setSmallIcon(com.example.compose.snippets.R.drawable.play)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0
    .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1
    .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2
    // Apply the media style template.
    .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
        .setShowActionsInCompactView(1 /* #1: pause button */))
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(bitmapImage)
    .build()

Una notifica con stile multimediale
Figura 5. Una notifica tramite MediaStyleNotificationHelper.MediaStyle.

Risorse aggiuntive

Per saperne di più su MediaStyle e sulle notifiche espandibili, consulta i seguenti riferimenti.