Oprócz podstawowej obsługi wiadomości opartej na powiadomieniach, która umożliwia czytanie i odpowiadanie na wiadomości, Android Auto obsługuje też bardziej zaawansowane funkcje wiadomości stworzone za pomocą biblioteki aplikacji Android for Cars.
Obsługa wysyłania wiadomości z powiadomieniami
Wszystkie aplikacje, które obsługują wiadomości w ramach szablonów, muszą też rozszerzać powiadomienia o wiadomościach w Androidzie Auto. Dzięki temu użytkownicy mogą czytać i odpowiadać na wiadomości bez otwierania aplikacji z szablonem.
Tworzenie szablonów wiadomości
Aby rozpocząć tworzenie aplikacji opartej na szablonach, postępuj zgodnie z instrukcjami w artykułach Korzystanie z biblioteki aplikacji Android for Cars i Dodawanie obsługi Androida Auto do aplikacji opartej na szablonach. Następnie zapoznaj się ze wskazówkami na tej stronie, aby poznać wymagania dotyczące aplikacji do przesyłania wiadomości z użyciem szablonów.
Konfigurowanie plików manifestu aplikacji
Aby poinformować Androida Auto o możliwościach aplikacji, aplikacja musi:
Zadeklaruj obsługę kategorii w pliku manifestu
Aplikacja musi zadeklarować androidx.car.app.category.MESSAGING
kategorię aplikacji samochodowych w filtrze intencji 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 API aplikacji do samochodu
Interfejs API ConversationItem
jest obsługiwany tylko w wersji Car
API 7 lub nowszej, dlatego wartość metadanych minCarApiLevel
powinna być taka sama. Więcej informacji znajdziesz w artykule dotyczącym poziomu interfejsu API aplikacji samochodowej.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Zadeklarowanie obsługi Androida Auto
W pliku automotive_app_desc.xml
, który służy do deklarowania obsługi Androida Auto, sprawdź, czy zadeklarowane są funkcje notification
i template
:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
Jeśli aplikacja może być ustawiona jako domyślny menedżer SMS-ów, uwzględnij element <uses>
. Jeśli tego nie zrobisz, do obsługi przychodzących SMS-ów i MMS-ów będzie używany domyślny moduł obsługi wbudowany w Androida Auto, co może spowodować zduplikowanie powiadomień.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
Wyświetlanie rozmów
Aby wyświetlić przegląd rozmów użytkownika, możesz wyświetlić listę obiektów ConversationItem
w ListTemplate
lub SectionedItemTemplate
.
Ze względu na wygodę użytkowników zalecamy wyświetlanie maksymalnie 5–10 najnowszych lub najważniejszych rozmów, z maksymalnie 5 najnowszymi wiadomościami w każdej z nich. Pomaga to w zwiększeniu szybkości wczytywania, zapewnia 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 ConversationItem
automatycznie wyświetla opcje odtwarzania wiadomości, oznaczania jej jako przeczytanej oraz odpowiadania. Te działania są obsługiwane przez ConversationCallbackDelegate
podany podczas tworzenia ConversationItem
.
Jeśli Twoja aplikacja udostępnia skróty rozmów, upewnij się, że identyfikator podany podczas tworzenia ConversationItem
jest taki sam jak identyfikator skrótu 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, jak odświeżyć zawartość szablonu.
Dla wygody użytkowników zalecamy, aby czas odświeżania nie przekraczał 500 milisekund. Jeśli odświeżanie trwa dłużej, możesz wyświetlić stan wczytywania podczas wczytywania przychodzących wiadomości.
Odpowiednio ustawiaj ważność powiadomień
Aby zmniejszyć rozproszenie uwagi, aplikacja powinna obniżać ważność przychodzących powiadomień, gdy użytkownik przegląda odpowiednią rozmowę, tak aby powiadomienia nie były wyświetlane jako powiadomienia typu heads up (HUN).
Aby sprawdzić, czy rozmowa jest widoczna, możesz śledzić cykl życia Screen
, który ją wyświetla. Zobacz Cykl życia ekranu.
Aby powiadomienie nie wyświetlało się jako powiadomienie o wysokiej ważności, ustaw priorytet na IMPORTANCE_DEFAULT
lub mniejszy.
Rozpowszechnianie aplikacji do obsługi wiadomości z wykorzystaniem szablonów
Aplikacje obsługujące szablony wiadomości mogą być publikowane w Google Play tylko na ścieżkach testów wewnętrznych i zamkniętych, dlatego nie promuj wersji, które obsługują ścieżki testów otwartych ani produkcyjnych, ponieważ przesłane wersje zawierające wersje z tych ścieżek zostaną odrzucone.