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.

Zacznij od utworzenia powiadomienia ze wszystkimi podstawowymi treściami zgodnie z opisem w artykule Tworzenie powiadomienia. Następnie wywołaj funkcję setStyle() z obiektem stylu i podaj informacje odpowiadające poszczególnym szablonom, jak pokazano w tych przykładach.

Dodawanie dużego obrazu

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 pojawiał się jako miniatura tylko wtedy, gdy powiadomienie jest zwinięte (jak pokazano na ilustracji poniżej), wywołaj funkcję setLargeIcon() i przekaż jej obraz. Następnie wywołaj BigPictureStyle.bigLargeIcon() i przekaż mu null, aby duża ikona zniknęł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()

Zwinięte i rozwinięte powiadomienie z niebieskim obrazem
Rysunek 1. Powiadomienie z użyciem 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()

zwinięte i rozwinięte powiadomienie z użyciem stylu BigTextStyle.
Rysunek 2. Powiadomienie z użyciem NotificationCompat.BigTextStyle.

Tworzenie powiadomienia w stylu skrzynki odbiorczej

Zastosuj NotificationCompat.InboxStyle w powiadomieniu, jeśli chcesz dodać kilka krótkich wierszy podsumowania, np. fragmenty przychodzących e-maili. Dzięki temu możesz dodać wiele fragmentów tekstu, z których każdy jest skracany do jednego wiersza, zamiast jednego ciągłego wiersza tekstu, który zapewnia komponent NotificationCompat.BigTextStyle.

Aby dodać nowy wiersz, wywołaj funkcję 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.

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 jak na tym rysunku:

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 przesyłania 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 funkcję addMessage(), przekazując tekst wiadomości, czas jej otrzymania i imię nadawcy. Możesz też przekazać te informacje jako obiekt NotificationCompat.MessagingStyle.Message, jak pokazano 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()

Powiadomienie w stylu wiadomości
Rysunek 4. Powiadomienie z użyciem NotificationCompat.MessagingStyle.

Jeśli używasz wartości NotificationCompat.MessagingStyle, wszystkie wartości podane w przypadku atrybutów setContentTitle()setContentText() są ignorowane.

Możesz wywołać funkcję setConversationTitle(), aby dodać tytuł, który będzie wyświetlany nad wątkiem. Może to być nazwa grupy utworzona przez użytkownika lub, jeśli nie ma ona 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 (poziom interfejsu API 24) i nowszym. Gdy używasz biblioteki zgodności (NotificationCompat), jak pokazano wcześniej, powiadomienia z MessagingStyle automatycznie wracają do obsługiwanego stylu rozwiniętego powiadomienia.

Podczas tworzenia takiego powiadomienia w przypadku rozmowy na czacie dodaj działanie bezpośredniej odpowiedzi.

Tworzenie powiadomienia z opcjami sterowania multimediami

Stosuj MediaStyleNotificationHelper.MediaStyle, aby wyświetlać elementy sterujące odtwarzaniem multimediów i informacje o utworze.

W konstruktorze określ powiązany obiekt MediaSession. Dzięki temu Android może wyświetlać prawidłowe informacje o Twoich multimediach.

Wywołaj funkcję addAction() maksymalnie 5 razy, aby wyświetlić maksymalnie 5 przycisków z ikonami. Wywołaj interfejs API setLargeIcon(), aby ustawić okładkę albumu.

W przeciwieństwie do innych stylów powiadomień styl MediaStyle umożliwia też modyfikowanie widoku treści o zmniejszonym rozmiarze przez określenie 3 przycisków działania, które również pojawiają się w tym widoku. Aby to zrobić, podaj indeksy przycisków polecenia do setShowActionsInCompactView().

Poniższy przykład pokazuje, jak utworzyć powiadomienie z elementami sterującymi 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()

Powiadomienie w stylu multimediów
Rysunek 5. Powiadomienie z użyciem MediaStyleNotificationHelper.MediaStyle.

Dodatkowe materiały

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