Crea una notifica espandibile

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

Per iniziare, crea una notifica con tutti i contenuti di base, come descritto nella sezione Creare 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 di grandi dimensioni

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

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setStyle(NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setStyle(new NotificationCompat.BigPictureStyle()
               .bigPicture(myBitmap))
        .build();

Per visualizzare l'immagine come miniatura solo mentre la notifica è compressa, come mostrato nella figura seguente, chiama setLargeIcon() e trasmetti l'immagine. Quindi, chiama il numero BigPictureStyle.bigLargeIcon() e trasmettilo null in modo che l'icona grande scompare quando la notifica viene espansa:

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_post)
        .setContentTitle(imageTitle)
        .setContentText(imageDescription)
        .setLargeIcon(myBitmap)
        .setStyle(new NotificationCompat.BigPictureStyle()
                .bigPicture(myBitmap)
                .bigLargeIcon(null))
        .build();
Un'immagine che mostra una notifica compressa e una notifica espansa contenente un'immagine blu
Figura 1. Una notifica usando NotificationCompat.BigPictureStyle.

Aggiungere un blocco di testo di grandi dimensioni

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

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setStyle(new NotificationCompat.BigTextStyle()
                .bigText(emailObject.getSubjectAndSnippet()))
        .build();
Un'immagine che mostra una notifica compressa e una notifica espansa utilizzando BigTextStyle
Figura 2. Una notifica usando NotificationCompat.BigTextStyle.

Creare una notifica in stile Posta in arrivo

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

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

Kotlin

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

Java

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

Il risultato è simile alla figura seguente:

Un'immagine che mostra una notifica espansa in stile Posta in arrivo
Figura 3. Una notifica espansa in stile Posta in arrivo.

Mostrare una conversazione in una notifica

Applica NotificationCompat.MessagingStyle per visualizzare messaggi sequenziali tra un numero qualsiasi di persone. È ideale per le app di messaggistica, poiché offre un layout coerente per ogni messaggio gestendo separatamente il nome del mittente e il testo del messaggio; ogni messaggio può essere lungo più righe.

Per aggiungere un nuovo messaggio, chiama il numero addMessage() trasmettendo 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:

Kotlin

val message1 = NotificationCompat.MessagingStyle.Message(
        messages[0].getText(),
        messages[0].getTime(),
        messages[0].getSender())
val message2 = NotificationCompat.MessagingStyle.Message(
        messages[1].getText(),
        messages[1].getTime(),
        messages[1].getSender())
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(
                NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build()

Java

NotificationCompat.MessagingStyle.Message message1 =
        new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                      messages[0].getTime(),
                                                      messages[0].getSender());
NotificationCompat.MessagingStyle.Message message2 =
        new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                      messages[1].getTime(),
                                                      messages[1].getSender());

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_message)
        .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                .addMessage(message1)
                .addMessage(message2))
        .build();
Un'immagine che mostra una notifica nello stile dei messaggi
Figura 4. Una notifica usando NotificationCompat.MessagingStyle.

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

Puoi chiamare il numero setConversationTitle() per aggiungere un titolo da visualizzare sopra la conversazione. Potrebbe essere il nome del gruppo creato dall'utente o, se non ha un nome specifico, un elenco dei partecipanti alla conversazione. Non impostare il titolo di una conversazione per le chat individuali, perché il sistema utilizza l'esistenza di questo campo come suggerimento 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 tornano automaticamente a uno stile di notifica espanso supportato.

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

Creare una notifica con i controlli multimediali

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

Specifica l'elemento MediaSession associato nel costruttore. Ciò consente ad Android di mostrare 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 inoltre di modificare la visualizzazione dei contenuti a dimensione compressa, specificando tre pulsanti di azione che compaiono anche nella visualizzazione compressa. A questo scopo, fornisci gli indici del pulsante di azione a setShowActionsInCompactView().

Nell'esempio seguente viene illustrato come creare una notifica con i controlli multimediali:

Kotlin

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
        // Show controls on lock screen even when user hides sensitive content.
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setSmallIcon(R.drawable.ic_stat_player)
        // Add media control buttons that invoke intents in your media service
        .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
        .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
        .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
        // Apply the media style template.
        .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button \*/))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build()

Java

Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
        // Show controls on lock screen even when user hides sensitive content.
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
        .setSmallIcon(R.drawable.ic_stat_player)
        // Add media control buttons that invoke intents in your media service
        .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
        .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
        .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
        // Apply the media style template.
        .setStyle(new MediaStyleNotificationHelper.MediaStyle(mediaSession)
                .setShowActionsInCompactView(1 /* #1: pause button */))
        .setContentTitle("Wonderful music")
        .setContentText("My Awesome Band")
        .setLargeIcon(albumArtBitmap)
        .build();
Un'immagine che mostra una notifica con stile multimediale
Figura 5. Una notifica usando MediaStyleNotificationHelper.MediaStyle.

Risorse aggiuntive

Consulta i seguenti riferimenti per ulteriori informazioni su MediaStyle e sulle notifiche espandibili.