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.