Tworzenie rozwijanych powiadomień

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()
Zwinięte i rozwinięte powiadomienie zawierające niebieski obraz
Rysunek 1. Powiadomienie korzystające z 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()
zwinięte i rozwinięte powiadomienie z użyciem stylu BigTextStyle.
Rysunek 2. Powiadomienie korzystające z 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:

rozwinięte powiadomienie w stylu skrzynki odbiorczej,
Rysunek 3. Rozwinięte powiadomienie w stylu skrzynki odbiorczej.

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()
Powiadomienie w stylu wiadomości
Rysunek 4. Powiadomienie korzystające z 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()
Powiadomienie w stylu multimediów
Rysunek 5. Powiadomienie korzystające z MediaStyleNotificationHelper.MediaStyle.

Dodatkowe materiały

Więcej informacji o MediaStyle i rozwijanych powiadomieniach znajdziesz w tych materiałach: