Powiadomienie podstawowe zawiera zwykle tytuł, wiersz tekstu i działania, które użytkownik może wykonać w odpowiedzi. Aby przekazać 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, jak opisano w artykule Tworzenie powiadomienia. Następnie wywołaj setStyle() z obiektem stylu i podaj informacje odpowiadające każdemu szablonowi, jak pokazano w poniższych przykładach.
Dodaj duży obraz
Aby dodać obraz do powiadomienia, przekaż instancję NotificationCompat.BigPictureStyle do setStyle().
var notification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(com.example.compose.snippets.R.drawable.ic_logo) .setContentTitle("Title") .setContentText("Content text") .setStyle( NotificationCompat.BigPictureStyle() .bigPicture(bitmapImage) ) .build()
Aby obraz był wyświetlany jako miniatura tylko wtedy, gdy powiadomienie jest zwinięte (jak na ilustracji poniżej), wywołaj metodę setLargeIcon() i przekaż jej obraz. Następnie wywołaj BigPictureStyle.bigLargeIcon() i przekaż null, aby duża ikona znikała po rozwinięciu powiadomienia:
notification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_logo) .setContentTitle("Title") .setContentText("Content text") .setLargeIcon(Icon.createWithResource(context, R.drawable.dog)) .setStyle( NotificationCompat.BigPictureStyle() .bigPicture(bitmapImage) .bigLargeIcon(null as Bitmap?) ) .build()
NotificationCompat.BigPictureStyle.
Dodawanie dużego bloku tekstu
Zastosuj NotificationCompat.BigTextStyle, aby wyświetlić tekst w rozwiniętym obszarze treści powiadomienia:
notification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_logo) .setContentTitle("Sender name") .setContentText("Email subject") .setLargeIcon(Icon.createWithResource(context, R.drawable.dog)) .setStyle( NotificationCompat.BigTextStyle() .bigText(someVeryLongMessage) ) .build()
NotificationCompat.BigTextStyle.
Tworzenie powiadomienia w stylu skrzynki odbiorczej
Zastosuj NotificationCompat.InboxStyle do powiadomienia, jeśli chcesz dodać kilka krótkich wierszy podsumowania, takich jak fragmenty przychodzących e-maili. Dzięki temu możesz dodać wiele fragmentów tekstu, z których każdy jest skracany do 1 wiersza, zamiast 1 ciągłego wiersza tekstu, który jest dostępny w przypadku NotificationCompat.BigTextStyle.
Aby dodać nową linię, wywołaj addLine() maksymalnie 6 razy, jak w tym przykładzie: Jeśli dodasz więcej niż 6 wierszy, widocznych będzie tylko pierwszych 6.
notification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.mail) .setContentTitle("5 New mails from Frank") .setContentText("Check them out") .setLargeIcon(bitmapImage) .setStyle( NotificationCompat.InboxStyle() .addLine("Re: Planning") .addLine("Delivery on its way") .addLine("Follow-up") ) .build()
Wynik wygląda tak jak na poniższym rysunku:
Wyświetlanie rozmowy w powiadomieniu
Zastosuj NotificationCompat.MessagingStyle, aby wyświetlać sekwencyjne 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, obsługując nazwę nadawcy i tekst wiadomości osobno, a każda wiadomość może mieć kilka 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 w tym przykładzie:
val message1 = NotificationCompat.MessagingStyle.Message( messages[0].text, messages[0].time, messages[0].sender ) val message2 = NotificationCompat.MessagingStyle.Message( messages[1].text, messages[1].time, messages[1].sender ) notification = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.MessagingStyle(Person.Builder().setName("Me").build()) .addMessage(message1) .addMessage(message2) ) .build()
NotificationCompat.MessagingStyle.
Jeśli używasz NotificationCompat.MessagingStyle, wszystkie wartości podane w 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 konkretnej nazwy, lista uczestników rozmowy.
Nie ustawiaj tytułu rozmowy w przypadku czatów 1:1, ponieważ system używa tego pola jako wskazówki, że rozmowa jest grupowa.
Ten styl jest stosowany tylko na urządzeniach z Androidem 7.0 (poziom interfejsu API 24) lub nowszym.
Jeśli używasz biblioteki zgodności (NotificationCompat), jak pokazano wcześniej, powiadomienia z MessagingStyle automatycznie przełączają się na obsługiwany styl powiadomień rozwiniętych.
Podczas tworzenia takiego powiadomienia 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.
Określ powiązany MediaSession w konstruktorze. Dzięki temu Android może wyświetlać prawidłowe informacje o multimediach.
Wywołaj addAction() maksymalnie 5 razy, aby wyświetlić do 5 przycisków ikon.
Wywołaj setLargeIcon(), aby ustawić okładkę albumu.
W odróżnieniu od innych stylów powiadomień MediaStyle umożliwia też modyfikowanie widoku treści w rozmiarze zwiniętym przez określenie 3 przycisków poleceń, które również pojawiają się 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:
notification = NotificationCompat.Builder(context, CHANNEL_ID) // Show controls on lock screen even when user hides sensitive content. .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setSmallIcon(com.example.compose.snippets.R.drawable.play) // Add media control buttons that invoke intents in your media service .addAction(R.drawable.previous, "Previous", null /* Add valid intent */) // #0 .addAction(R.drawable.pause, "Pause", null /* Add valid intent */) // #1 .addAction(R.drawable.next, "Next", null /* Add valid intent */) // #2 // Apply the media style template. .setStyle(MediaStyleNotificationHelper.MediaStyle(mediaSession) .setShowActionsInCompactView(1 /* #1: pause button */)) .setContentTitle("Wonderful music") .setContentText("My Awesome Band") .setLargeIcon(bitmapImage) .build()
MediaStyleNotificationHelper.MediaStyle.
Dodatkowe materiały
Więcej informacji o MediaStyle i powiadomieniach rozwijanych znajdziesz w tych materiałach.
- Korzystanie z powiadomień MediaStyle w usłudze działającej na pierwszym planie
- Przykładowa aplikacja SociaLite