Tworzenie szablonów wiadomości dla Androida Auto

Przesyłanie wiadomości na podstawie szablonów jest w wersji beta
Obecnie każdy może publikować aplikacje do komunikacji z funkcją przesyłania wiadomości na podstawie szablonów na ścieżkach testów wewnętrznych i zamkniętych w Sklepie Play. Publikowanie na ścieżkach testów otwartych i produkcyjnych będzie możliwe w późniejszym terminie.

Oprócz podstawowej funkcji przesyłania wiadomości opartej na powiadomieniach, która umożliwia odczytywanie wiadomości i odpowiadanie na nie, Android Auto obsługuje bardziej rozbudowane funkcje przesyłania wiadomości oparte na bibliotece aplikacji Android do samochodu.

Obsługa funkcji przesyłania wiadomości opartej na powiadomieniach

Wszystkie aplikacje obsługujące funkcję przesyłania wiadomości na podstawie szablonów muszą też rozszerzać powiadomienia o wiadomościach na Androida Auto. Ta integracja umożliwia użytkownikom odczytywanie wiadomości i odpowiadanie na nie bez konieczności otwierania aplikacji opartej na szablonie.

Tworzenie funkcji przesyłania wiadomości na podstawie szablonów

Aby rozpocząć tworzenie funkcji przesyłania wiadomości na podstawie szablonów w aplikacji, postępuj zgodnie ze wskazówkami w sekcjach Korzystanie z biblioteki aplikacji Android do samochodu i Dodawanie obsługi Androida Auto do aplikacji opartej na szablonie. Następnie zapoznaj się ze wskazówkami na tej stronie, aby poznać szczegółowe wymagania dotyczące aplikacji do przesyłania wiadomości na podstawie szablonów.

Konfigurowanie plików manifestu aplikacji

Aby poinformować Androida Auto o możliwościach aplikacji, musisz wykonać te czynności:

Deklarowanie obsługi kategorii w pliku manifestu

Aplikacja musi zadeklarować androidx.car.app.category.MESSAGING kategorię aplikacji samochodowej w filtrze intencji usługi CarAppService.

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.MESSAGING"/>
      </intent-filter>
    </service>
    ...
<application>

Ustawianie minimalnego poziomu interfejsu Car App API

Interfejs ConversationItem API jest obsługiwany tylko w interfejsie Car API w wersji 7 lub nowszej, dlatego należy też ustawić metadane minCarApiLevel na tę wartość. Więcej informacji znajdziesz w sekcji Poziom interfejsu Car App API.

<application ...>
    ...
    <meta-data
        android:name="androidx.car.app.minCarApiLevel"
        android:value="7"/>
    ...
</application>

Deklarowanie obsługi Androida Auto

W pliku automotive_app_desc.xml, którego używasz do deklarowania obsługi Androida Auto, sprawdź, czy zadeklarowane są możliwości notification i template:

<automotiveApp>
    <uses name="notification" />
    <uses name="template" />
</automotiveApp>

Jeśli aplikację można ustawić jako domyślną aplikację do obsługi SMS-ów, dodaj ten element <uses>. W przeciwnym razie do obsługi przychodzących SMS-ów i MMS-ów będzie używana domyślna aplikacja wbudowana w Androida Auto, co może prowadzić do duplikowania powiadomień.

<automotiveApp>
    ...
    <uses name="sms" />
</automotiveApp>

Wyświetlanie rozmów

Aby wyświetlić przegląd rozmów użytkownika, możesz wyświetlić listę ConversationItem obiektów w ListTemplate lub SectionedItemTemplate.

Aby zapewnić użytkownikom wygodę, zalecamy wyświetlanie co najwyżej 5–10 najnowszych lub najważniejszych rozmów, z których każda zawiera nie więcej niż 5 najnowszych wiadomości. Pomaga to zwiększyć wydajność wczytywania, umożliwia użytkownikom wyświetlanie najbardziej odpowiednich treści i skraca czas interakcji.

class MyMessagingScreen() : Screen() {

    override fun onGetTemplate(): Template {
        val itemListBuilder = ItemList.Builder()
        val conversations: List<MyConversation> = // Retrieve conversations

        for (conversation: MyConversation in conversations) {
            val carMessages: List<CarMessage> = conversation.getMessages()
                .map { message ->
                    // CarMessage supports additional fields such as MIME type and URI,
                    // which you should set if available
                    CarMessage.Builder()
                        .setSender(message.sender)
                        .setBody(message.body)
                        .setReceivedTimeEpochMillis(message.receivedTimeEpochMillis)
                        .setRead(message.isRead)
                        .build()
                }

            itemListBuilder.addItem(
                ConversationItem.Builder()
                    .setConversationCallback { /* Implement your conversation callback logic here */ }
                    .setId(/* Set conversation ID */)
                    .setTitle(/* Set conversation title */)
                    .setIcon(/* Set conversation icon if available */)
                    .setMessages(carMessages)
                    /* When the sender of a CarMessage is equal to this Person,
                    message readout is adjusted to "you said" instead of "<person>
                    said" */
                    .setSelf(/* Set self-sender */)
                    .setGroupConversation(/* Set if the message contains more than 2 participants */)
                    .build()
            )
        }

        return ListTemplate.Builder()
            .setTitle("Conversations")
            .setHeaderAction(Action.APP_ICON)
            .setSingleList(itemListBuilder.build())
            .build()
    }
}

Każdy element ConversationItem automatycznie wyświetla działania umożliwiające odtworzenie wiadomości, oznaczenie jej jako przeczytanej i odpowiedzenie na nią. Te działania są obsługiwane przez element ConversationCallbackDelegate, który podajesz podczas tworzenia elementu ConversationItem.

Jeśli aplikacja udostępnia skróty do rozmów, sprawdź , czy identyfikator podany podczas tworzenia elementu ConversationItem jest taki sam jak identyfikator skrótu do tej rozmowy.

Aktualizowanie rozmów

Gdy użytkownicy wysyłają i odbierają wiadomości, odświeżaj ekrany aplikacji, aby uwzględnić nowe wiadomości, wywołując funkcję invalidate(). Zobacz Odświeżanie zawartości szablonu.

Aby zapewnić użytkownikom wygodę, zalecamy, aby czas odświeżania nie przekraczał 500 milisekund. Jeśli częste odświeżanie trwa dłużej, podczas wczytywania przychodzących wiadomości możesz wyświetlać stan wczytywania.

Odpowiednie ustawianie ważności powiadomień

Aby ograniczyć rozpraszanie uwagi, aplikacja powinna obniżać ważność przychodzących powiadomień, gdy użytkownik korzysta z aplikacji lub wyświetla odpowiednią rozmowę. Dzięki temu powiadomienia nie będą wyświetlane jako powiadomienia wyskakujące.

Możesz sprawdzić, czy rozmowa jest widoczna, obserwując cykl życia elementu Screen, który ją wyświetla. Zobacz Cykl życia ekranu.

Aby powiadomienie nie było wyświetlane jako powiadomienie wyskakujące, ustaw priorytet na IMPORTANCE_DEFAULT lub niższy.

Rozpowszechnianie aplikacji do przesyłania wiadomości na podstawie szablonów

Aplikacje obsługujące funkcję przesyłania wiadomości na podstawie szablonów można publikować tylko na ścieżkach testów wewnętrznych i zamkniętych w Google Play. Nie promuj wersji, które obsługują ścieżki testów otwartych i produkcyjne, ponieważ przesłane wersje na tych ścieżkach zostaną odrzucone.