Podstawowe powiadomienie zwykle zawiera tytuł, wiersz tekstu i działania, które użytkownik może wykonać w odpowiedzi. Aby podać 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 treściami zgodnie z opisem w artykule
Tworzenie powiadomienia. Następnie wywołaj metodę setStyle() z obiektem stylu i
podaj informacje odpowiadające każdemu szablonowi, jak pokazano w poniższych
przykładach.
Dodawanie dużego obrazu
Aby dodać obraz w powiadomieniu, przekaż instancję
NotificationCompat.BigPictureStyle do setStyle().
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.new_post)
.setContentTitle(imageTitle)
.setContentText(imageDescription)
.setStyle(NotificationCompat.BigPictureStyle()
.bigPicture(myBitmap))
.build()
Aby obraz wyświetlał się jako miniatura tylko wtedy, gdy powiadomienie jest
zwinięte, jak pokazano na ilustracji poniżej, wywołaj metodę
setLargeIcon()
i przekaż do niej obraz. Następnie wywołaj
BigPictureStyle.bigLargeIcon()
i przekaż do niej wartość null, aby duża ikona zniknęła po rozwinięciu powiadomienia:
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()
NotificationCompat.BigPictureStyle.
Dodawanie dużego bloku tekstu
Zastosuj NotificationCompat.BigTextStyle, aby wyświetlać tekst w rozwiniętym
obszarze treści powiadomienia:
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()
NotificationCompat.BigTextStyle.
Tworzenie powiadomienia w stylu skrzynki odbiorczej
Zastosuj NotificationCompat.InboxStyle do powiadomienia, jeśli chcesz dodać
kilka krótkich wierszy podsumowania, np. fragmenty przychodzących e-maili. Dzięki temu możesz dodać kilka fragmentów tekstu, z których każdy jest skracany do jednego wiersza, zamiast jednego ciągłego wiersza tekstu udostępnianego przez NotificationCompat.BigTextStyle.
Aby dodać nowy wiersz, wywołaj metodę addLine() maksymalnie 6 razy, jak pokazano w
poniższym przykładzie. Jeśli dodasz więcej niż 6 wierszy, widocznych będzie tylko pierwszych 6.
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()
Wynik wygląda jak na ilustracji poniżej:
Wyświetlanie rozmowy w powiadomieniu
Zastosuj NotificationCompat.MessagingStyle, aby wyświetlać kolejne wiadomości
między dowolną liczbą osób. Jest to idealne rozwiązanie w przypadku aplikacji do obsługi wiadomości, ponieważ zapewnia spójny układ każdej wiadomości, oddzielnie obsługując nazwę nadawcy i tekst wiadomości, a każda wiadomość może mieć wiele wierszy.
Aby dodać nową wiadomość, wywołaj metodę addMessage(), przekazując tekst wiadomości,
czas jej otrzymania i nazwę nadawcy. Możesz też przekazać te informacje jako obiekt
NotificationCompat.MessagingStyle.Message, jak pokazano w
poniższym przykładzie:
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()
NotificationCompat.MessagingStyle.
Gdy używasz NotificationCompat.MessagingStyle, wszystkie wartości podane w
setContentTitle() i setContentText() są ignorowane.
Możesz wywołać metodę setConversationTitle(), aby dodać tytuł, który będzie się wyświetlać nad
rozmową. Może to być nazwa grupy utworzona przez użytkownika lub, jeśli nie ma określonej nazwy, lista uczestników rozmowy.
Nie ustawiaj tytułu rozmowy w przypadku czatów 1:1, ponieważ system używa istnienia tego pola jako wskazówki, że rozmowa jest grupowa.
Ten styl jest stosowany tylko na urządzeniach z Androidem 7.0 (API na poziomie 24) lub nowszym.
Gdy używasz biblioteki zgodności (NotificationCompat), jak
pokazano wcześniej, powiadomienia z MessagingStyle automatycznie wracają
do obsługiwanego rozwiniętego stylu powiadomień.
Tworząc powiadomienie tego typu na potrzeby rozmowy na czacie, dodaj działanie bezpośredniej odpowiedzi.
Tworzenie powiadomienia z opcjami sterowania multimediami
Zastosuj MediaStyleNotificationHelper.MediaStyle, aby wyświetlać elementy sterujące odtwarzaniem multimediów
i informacje o utworze.
W konstruktorze określ powiązaną MediaSession. Dzięki temu Android może wyświetlać prawidłowe informacje o Twoich multimediach.
Wywołaj metodę addAction() maksymalnie 5 razy, aby wyświetlić maksymalnie 5 przycisków z ikonami.
Wywołaj metodę setLargeIcon(), aby ustawić okładkę albumu.
W przeciwieństwie do innych stylów powiadomień MediaStyle umożliwia też modyfikowanie widoku treści o zmniejszonym rozmiarze przez określenie 3 przycisków poleceń, które będą się też wyświetlać w widoku zwiniętym. Aby to zrobić, podaj indeksy przycisków poleceń w
setShowActionsInCompactView().
Poniższy przykład pokazuje, jak utworzyć powiadomienie z opcjami sterowania multimediami:
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()
MediaStyleNotificationHelper.MediaStyle.
Dodatkowe materiały
Więcej informacji o MediaStyle i rozwijanych powiadomieniach znajdziesz w tych materiałach: