Tworzenie rozwijanych powiadomień

Podstawowe powiadomienie zawiera zwykle tytuł, wiersz tekstu oraz działania, które użytkownik może wykonać. Aby podać więcej informacji, możesz utworzyć rozwijanych powiadomieniach, stosując jeden z kilku szablonów powiadomień opisane w tym dokumencie.

Na początek utwórz powiadomienie ze wszystkimi podstawowymi treściami, tak jak to opisano w Utwórz powiadomienie. Następnie: zadzwoń setStyle() z obiektem stylu i podaj informacje odpowiadające poszczególnym szablonom, co widać w poniższych przykładach.

Dodaj duży obraz

Aby dodać obraz do powiadomienia, przekaż wystąpienie 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ł wyświetlany jako miniatura tylko wtedy, gdy powiadomienie jest wyświetlane jak na ilustracji poniżej, wywołaj setLargeIcon() i przekazać mu obraz. Następnie zadzwoń BigPictureStyle.bigLargeIcon() i przekaż go null, aby duża ikona znikała, gdy powiadomienie rozwinięto:

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();
Obraz przedstawiający zwijane powiadomienie oraz rozwinięte powiadomienie zawierające niebieski obraz
Rysunek 1. Powiadomienie, używając NotificationCompat.BigPictureStyle

Dodaj duży blok tekstu

Zastosuj NotificationCompat.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();
Obraz przedstawiający zwijane i rozwinięte powiadomienie w aplikacji BigTextStyle
Rysunek 2. Powiadomienie, używając NotificationCompat.BigTextStyle
.
.

Tworzenie powiadomień w stylu skrzynki odbiorczej

Zastosuj NotificationCompat.InboxStyle w powiadomieniu, jeśli chcesz dodać kilka krótkich wierszy podsumowania, fragmenty wiadomości przychodzących. Umożliwia to dodanie wielu fragmentów tekstu zawartości które są obcięte do 1 wiersza, a nie do jednej ciągłej linii tekstu źródło: NotificationCompat.BigTextStyle.

Aby dodać nową linię, zadzwoń pod numer addLine() do 6 razy, jak widać w przykładzie poniżej. Jeśli dodasz więcej niż 6 tylko pierwszych 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 tak:

Obraz pokazujący powiadomienie w stylu rozwiniętej skrzynki odbiorczej
Rysunek 3. Stylizowany na rozwiniętą skrzynkę odbiorczą powiadomienia.
.
.

Pokazywanie rozmowy w powiadomieniu

Zastosuj NotificationCompat.MessagingStyle wyświetlanie wiadomości sekwencyjnych między dowolną liczbą osób. Jest to idealne rozwiązanie, gdy: aplikacje do obsługi wiadomości, ponieważ zapewniają spójny układ każdej wiadomości z nazwą nadawcy i tekstem wiadomości, a każdą wiadomość można wiele wierszy.

Aby dodać nową wiadomość, zadzwoń pod numer addMessage() przekazując tekst wiadomości, godzinę otrzymania oraz nazwę nadawcy. Możesz też przekazać tę informację jako 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();
Obraz przedstawiający powiadomienie w stylu wiadomości
Rysunek 4. Powiadomienie, używając NotificationCompat.MessagingStyle

Jeśli używasz funkcji NotificationCompat.MessagingStyle, wszystkie wartości podane dla argumentu setContentTitle(). oraz setContentText() są ignorowane.

Możesz zadzwonić do nas, setConversationTitle() aby dodać tytuł wyświetlany nad rozmową. Może to być utworzona przez użytkownika nazwa grupy lub, jeśli nie ma ona konkretnej nazwy, lista z uczestnikami rozmowy. Nie ustawiaj tytułu rozmowy dla czatów 1:1, ponieważ system wykorzystuje to pole jako wskazówkę że rozmowa jest grupą.

Ten styl dotyczy tylko urządzeń z Androidem 7.0 (poziom interfejsu API 24) i nowszym. Korzystanie z biblioteki zgodności (NotificationCompat), jak wykazaliśmy wcześniej, powiadomienia z MessagingStyle są zastępcze automatycznie na obsługiwany rozwinięty styl powiadomień.

Tworząc takie powiadomienie dla rozmowy na czacie, dodaj działania związane z odpowiedzią.

Tworzenie powiadomienia za pomocą opcji sterowania multimediami

Zastosuj MediaStyleNotificationHelper.MediaStyle w celu wyświetlania elementów sterujących odtwarzaniem multimediów i informacji o śledzeniu.

Określ powiązane MediaSession w za pomocą konstruktora. Dzięki temu Android może wyświetlać prawidłowe informacje o Twoim urządzeniu multimediów.

Zadzwoń do nas addAction() do pięciu razy. Zadzwoń pod numer setLargeIcon() do ustawić okładkę albumu.

W przeciwieństwie do innych stylów powiadomień MediaStyle pozwala też zmieniać widoku treści zwiniętym, określając trzy przyciski poleceń, które również pojawiają się w widoku zwiniętym. Aby to zrobić, przekaż indeksy przycisków polecenia na setShowActionsInCompactView()

Z przykładu poniżej dowiesz się, jak utworzyć powiadomienie za pomocą opcji sterowania multimediami:

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();
Obraz przedstawiający powiadomienie w stylu multimediów
Rysunek 5. Powiadomienie, używając MediaStyleNotificationHelper.MediaStyle
.
.

Dodatkowe materiały

Zapoznaj się z tymi materiałami, aby dowiedzieć się więcej na temat MediaStyle oraz powiadomienia rozwijane.