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 maggiori informazioni, puoi creare modelli le notifiche espandibili applicando uno dei vari modelli di notifica descritti in questo documento.

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

Aggiungi un'immagine grande

Per aggiungere un'immagine nella 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 fare in modo che l'immagine venga visualizzata come miniatura solo mentre la notifica è compressa, come mostrato nella figura seguente, richiama setLargeIcon() e passarle l'immagine. Quindi chiama BigPictureStyle.bigLargeIcon() e la passiamo null in modo che l'icona grande scompare quando la notifica viene espanso:

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 con NotificationCompat.BigPictureStyle.

Aggiungi un grande blocco di testo

Richiedi NotificationCompat.BigTextStyle per visualizzare il testo nell'area dei contenuti espansa 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 con NotificationCompat.BigTextStyle.
di Gemini Advanced.
.

Crea una notifica in stile Posta in arrivo

Richiedi NotificationCompat.InboxStyle a una notifica se vuoi aggiungere più righe di riepilogo brevi, come di snippet dalle email in arrivo. In questo modo puoi aggiungere più testi di contenuti troncati a una riga, invece che a una riga continua di testo fornita da NotificationCompat.BigTextStyle.

Per aggiungere una nuova riga, chiama addLine() fino a sei volte, come nell'esempio che segue. Se aggiungi più di sei e sono 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 in stile casella di posta espansa
. Figura 3. Una casella di posta in stile espansa notifica.
di Gemini Advanced.
.

Mostrare una conversazione in una notifica

Richiedi NotificationCompat.MessagingStyle per visualizzare messaggi sequenziali tra un numero qualsiasi di persone. È l'ideale per app di messaggistica, perché fornisce un layout coerente per ogni messaggio gestire separatamente il nome del mittente e il testo del messaggio e ogni messaggio può 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 passa queste informazioni come 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 in stile messaggio
. Figura 4. Una notifica con NotificationCompat.MessagingStyle.

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

Puoi chiamare setConversationTitle() per aggiungere un titolo che appare sopra la conversazione. Potrebbe essere nome del gruppo creato dall'utente o, se non ha un nome specifico, un elenco i partecipanti alla conversazione. Non impostare un titolo per la conversazione Chat individuali, perché il sistema utilizza l'esistenza di questo campo come suggerimento che la conversazione sia un gruppo.

Questo stile è valido solo per i 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 di riserva automaticamente in uno stile di notifica espanso supportato.

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

Crea una notifica con i controlli multimediali

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

Specifica il tipo di account associato MediaSession nel come costruttore. In questo modo Android può mostrare le informazioni giuste 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 ti consente anche di modificare visualizzazione dei contenuti a dimensione compressa specificando tre pulsanti di azione che vengono visualizzati anche nella visualizzazione compressa. A tale scopo, fornisci gli indici del pulsante di azione setShowActionsInCompactView()

L'esempio seguente mostra 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 con MediaStyleNotificationHelper.MediaStyle.
di Gemini Advanced.
.

Risorse aggiuntive

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