Podstawowe powiadomienie zwykle zawiera tytuł, wiersz tekstu oraz działania, które użytkownik może wykonać w odpowiedzi na powiadomienie. Aby wyświetlać więcej informacji, możesz utworzyć duże, rozwijane powiadomienia, stosując jeden z kilku szablonów powiadomień opisanych w tym dokumencie.
Na początek utwórz powiadomienie ze wszystkimi podstawowymi elementami, jak opisano w artykule Tworzenie powiadomienia. Następnie wywołaj funkcję setStyle()
z obiektem style i podaj informacje odpowiadające poszczególnym szablonom, jak w przykładach poniżej.
Dodawanie dużego obrazu
Aby dodać obraz w powiadomieniu, przekaż instancję
NotificationCompat.BigPictureStyle
do 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();
Aby obraz był widoczny jako miniatura tylko wtedy, gdy powiadomienie jest zwinięte (jak na rysunku poniżej), wywołaj metodę setLargeIcon()
i przekaż jej obraz. Następnie wywołaj funkcję BigPictureStyle.bigLargeIcon()
i przekaż jej parametr null
, aby duża ikona zniknęła po rozwinięciu powiadomienia:
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();
Dodawanie dużego bloku tekstu
ZastosujNotificationCompat.BigTextStyle
, aby wyświetlić tekst w rozwiniętym obszarze treści powiadomienia:
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();
Tworzenie powiadomienia w stylu skrzynki odbiorczej
Użyj NotificationCompat.InboxStyle
w powiadomieniu, jeśli chcesz dodać kilka krótkich linii podsumowania, np. fragmenty z otrzymywanych e-maili. Dzięki temu możesz dodać wiele fragmentów tekstu, które są skrócone do jednego wiersza, zamiast jednego ciągłego wiersza tekstu udostępnianego przez funkcję NotificationCompat.BigTextStyle
.
Aby dodać nową linię, wywołaj funkcję addLine()
maksymalnie 6 razy, jak pokazano w tym przykładzie. Jeśli dodasz więcej niż 6 wierszy, widoczne będą tylko pierwsze 6.
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();
Wynik wygląda jak na rysunku:
Wyświetlanie rozmowy w powiadomieniu
Użyj NotificationCompat.MessagingStyle
, aby wyświetlać sekwencyjne wiadomości między dowolną liczbą osób. Jest to idealne rozwiązanie dla aplikacji do przesyłania wiadomości, ponieważ zapewnia spójny układ każdej wiadomości, obsługując oddzielnie nazwę nadawcy i tekst wiadomości. Każda wiadomość może mieć kilka linii.
Aby dodać nową wiadomość, zadzwoń pod numer
addMessage()
,
przekazując tekst wiadomości, godzinę otrzymania i nazwę nadawcy. Możesz też przekazać te informacje jako obiekt NotificationCompat.MessagingStyle.Message
, jak w tym przykładzie:
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();
Gdy używasz funkcji NotificationCompat.MessagingStyle
, wszystkie wartości podane w parametrach setContentTitle()
i setContentText()
są ignorowane.
Możesz wywołać funkcję setConversationTitle()
, aby dodać tytuł, który będzie wyświetlany nad rozmową. Może to być nazwa grupy utworzona przez użytkownika lub, jeśli nie ma ona nazwy, lista uczestników rozmowy. Nie ustawiaj tytułu rozmowy w przypadku czatów jeden na jednego, ponieważ system używa tego pola jako wskazówki, że rozmowa jest grupowa.
Ten styl jest dostępny tylko na urządzeniach z Androidem 7.0 (poziom interfejsu API 24) lub nowszym.
Gdy używasz biblioteki zgodności (NotificationCompat
), powiadomienia z MessagingStyle
automatycznie przechodzą na obsługiwany styl powiadomienia z rozwiniętymi informacjami.
Podczas tworzenia takiego powiadomienia na potrzeby rozmowy na czacie dodaj bezpośrednie działanie odpowiedzi.
Tworzenie powiadomienia z elementami sterowania multimediami
Zastosuj MediaStyleNotificationHelper.MediaStyle
, aby wyświetlić elementy sterujące odtwarzaniem multimediów i informacje o ścieżce dźwiękowej.
W konstrukcji podaj powiązany z nim parametr MediaSession
. Dzięki temu Android będzie mógł wyświetlać prawidłowe informacje o Twoich mediach.
Naciśnij addAction()
do 5 razy, aby wyświetlić do 5 przycisków z ikonami. Wywołaj funkcję setLargeIcon()
, aby ustawić okładkę albumu.
W przeciwieństwie do innych stylów powiadomień MediaStyle
pozwala również zmodyfikować widok treści w zwiniętej formie, określając 3 przyciski działania, które również będą widoczne w zwiniętej formie. Aby to zrobić, podaj indeksy przycisków akcji w setShowActionsInCompactView()
.
Ten przykład pokazuje, jak utworzyć powiadomienie z ustawieniami multimediów:
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();
Dodatkowe materiały
Więcej informacji o MediaStyle
i rozwijanych powiadomieniach znajdziesz w tych materiałach:
- Korzystanie z powiadomień w stylu MediaStyle w usłudze na pierwszym planie
- Przykładowa aplikacja SociaLite