Créer une notification extensible

Une notification de base comprend généralement un titre, une ligne de texte et des actions que l'utilisateur peut effectuer en réponse. Pour fournir plus d'informations, vous pouvez créer des notifications volumineuses et extensibles en appliquant l'un des différents modèles de notification décrits dans ce document.

Pour commencer, créez une notification avec tout le contenu de base, comme décrit dans la section Créer une notification. Appelez ensuite setStyle() avec un objet de style et fournissez les informations correspondant à chaque modèle, comme illustré dans les exemples suivants.

Ajouter une grande image

Pour ajouter une image à votre notification, transmettez une instance de NotificationCompat.BigPictureStyle à 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();

Pour que l'image n'apparaisse sous forme de vignette que lorsque la notification est réduite, comme illustré dans la figure suivante, appelez setLargeIcon() et transmettez-lui l'image. Appelez ensuite BigPictureStyle.bigLargeIcon() et transmettez-le null afin que la grande icône disparaisse lorsque la notification est développée:

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();
Image montrant une notification réduite et une notification développée contenant une image bleue
Figure 1 : Notification utilisant NotificationCompat.BigPictureStyle

Ajouter un grand bloc de texte

Appliquez NotificationCompat.BigTextStyle pour afficher du texte dans la zone de contenu développée de la notification:

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();
Image montrant une notification réduite et une notification développée utilisant BigTextStyle
Figure 2. Notification utilisant NotificationCompat.BigTextStyle

Créer une notification de type boîte de réception

Appliquez NotificationCompat.InboxStyle à une notification si vous souhaitez ajouter plusieurs lignes de résumé courtes, telles que des extraits d'e-mails entrants. Cela vous permet d'ajouter plusieurs éléments textuels de contenu, chacun tronqué à une ligne, au lieu de la ligne de texte continue fournie par NotificationCompat.BigTextStyle.

Pour ajouter une ligne, appelez addLine() jusqu'à six fois, comme illustré dans l'exemple suivant. Si vous ajoutez plus de six lignes, seules les six premières sont visibles.

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

Le résultat ressemble à l'image ci-dessous:

Image montrant une notification de type boîte de réception développée
Figure 3. Notification de type boîte de réception développée.

Afficher une conversation dans une notification

Appliquez NotificationCompat.MessagingStyle pour afficher des messages séquentiels entre un nombre illimité de personnes. Cette approche est idéale pour les applications de chat, car elle offre une mise en page cohérente pour chaque message en gérant séparément le nom de l'expéditeur et le texte du message, et chaque message peut comporter plusieurs lignes.

Pour ajouter un message, appelez addMessage() en transmettant le texte du message, l'heure de réception et le nom de l'expéditeur. Vous pouvez également transmettre ces informations en tant qu'objet NotificationCompat.MessagingStyle.Message, comme illustré dans l'exemple suivant:

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();
Image montrant une notification dans le style "Messages"
Figure 4. Notification utilisant NotificationCompat.MessagingStyle

Lorsque vous utilisez NotificationCompat.MessagingStyle, toutes les valeurs fournies à setContentTitle() et setContentText() sont ignorées.

Vous pouvez appeler setConversationTitle() pour ajouter un titre qui apparaît au-dessus de la conversation. Il peut s'agir du nom du groupe créé par l'utilisateur ou, s'il n'a pas de nom spécifique, d'une liste des participants à la conversation. Ne définissez pas de titre pour les discussions en tête-à-tête, car le système utilise l'existence de ce champ pour indiquer qu'il s'agit d'un groupe.

Ce style ne s'applique qu'aux appareils équipés d'Android 7.0 (niveau d'API 24) ou version ultérieure. Lorsque vous utilisez la bibliothèque de compatibilité (NotificationCompat), comme indiqué précédemment, les notifications avec MessagingStyle basculent automatiquement sur un style de notification étendu compatible.

Lorsque vous créez une notification comme celle-ci pour une conversation par chat, ajoutez une action de réponse directe.

Créer une notification avec des commandes multimédias

Appliquez MediaStyleNotificationHelper.MediaStyle pour afficher les commandes de lecture multimédia et les informations sur les titres.

Spécifiez votre MediaSession associé dans le constructeur. Cela permet à Android d'afficher les bonnes informations concernant vos contenus multimédias.

Appelez addAction() jusqu'à cinq fois pour afficher jusqu'à cinq boutons d'icône. Appelez setLargeIcon() pour définir la pochette de l'album.

Contrairement aux autres styles de notification, MediaStyle vous permet également de modifier la vue de contenu réduite en spécifiant trois boutons d'action qui apparaissent également dans la vue réduite. Pour ce faire, fournissez les index du bouton d'action à setShowActionsInCompactView().

L'exemple suivant montre comment créer une notification contenant des commandes multimédias:

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();
Image montrant une notification avec un style multimédia
Figure 5. Notification utilisant MediaStyleNotificationHelper.MediaStyle

Ressources supplémentaires

Pour en savoir plus sur MediaStyle et les notifications à développer, consultez les documentations de référence suivantes.