Na tej stronie szczegółowo opisujemy różne funkcje biblioteki aplikacji samochodowej, których możesz użyć do zaimplementowania funkcji aplikacji do nawigacji zakręt po zakręcie.
Zadeklaruj obsługę nawigacji w pliku manifestu
Aplikacja do nawigacji musi zadeklarować kategorię aplikacji samochodowej androidx.car.app.category.NAVIGATION
w filtrze intencji w elemencie CarAppService
:
<application>
...
<service
...
android:name=".MyNavigationCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.NAVIGATION"/>
</intent-filter>
</service>
...
</application>
Obsługa intencji związanych z nawigacją
Aby obsługiwać intencje związane z nawigacją do aplikacji, w tym te pochodzące od Asystenta Google za pomocą zapytania głosowego, aplikacja musi obsługiwać intencje CarContext.ACTION_NAVIGATE
w treściach Session.onCreateScreen
i Session.onNewIntent
.
Szczegółowe informacje o formacie intencji znajdziesz w dokumentacji CarContext.startCarApp
.
Uzyskiwanie dostępu do szablonów nawigacji
Aplikacje nawigacyjne mają dostęp do tych szablonów przeznaczonych specjalnie do nawigacji w aplikacjach. Wszystkie te szablony wyświetlają w tle płaszczyznę z mapą oraz szczegółowe wskazówki dojazdu podczas aktywnej nawigacji.
NavigationTemplate
: podczas aktywnej nawigacji wyświetla też opcjonalny komunikat informacyjny i szacunkowy koszt podróży.MapTemplate
: wyświetla kompaktową wersję listy (np.ListTemplate
) lub panelu (szczegółowe informacje z widocznymi działaniami, jak np.PaneTemplate
) obok mapy.PlaceListNavigationTemplate
: wyświetla też listę miejsc, dla których można narysować na mapie odpowiednie znaczniki.RoutePreviewNavigationTemplate
: wyświetla też listę tras, z których jedną można wybrać i podświetlić na mapie.
Więcej informacji o projektowaniu interfejsu aplikacji nawigacyjnej za pomocą tych szablonów znajdziesz w artykule Aplikacje nawigacyjne.
Aby uzyskać dostęp do szablonów nawigacji, aplikacja musi zadeklarować uprawnienie androidx.car.app.NAVIGATION_TEMPLATES
w swoim pliku AndroidManifest.xml
:
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
Rysowanie mapy
Aplikacje nawigacyjne mogą korzystać z Surface
, aby rysować mapę na odpowiednich szablonach.
Aby uzyskać dostęp do obiektu SurfaceContainer
, ustaw instancję SurfaceCallback
w usłudze samochodowej AppManager
:
Kotlin
carContext.getCarService(AppManager::class.java).setSurfaceCallback(surfaceCallback)
Java
carContext.getCarService(AppManager.class).setSurfaceCallback(surfaceCallback);
SurfaceCallback
udostępnia wywołanie zwrotne, gdy SurfaceContainer
jest dostępny, wraz z innymi wywołaniami zwrotnymi, gdy zmienią się właściwości Surface
.
Aby uzyskać dostęp do platformy, aplikacja musi zadeklarować uprawnienie androidx.car.app.ACCESS_SURFACE
w swoim pliku AndroidManifest.xml
:
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
Widoczny obszar mapy
Host może rysować na mapie elementy interfejsu użytkownika szablonów. Host komunikuje obszar, który jest niezasłonięty i w pełni widoczny dla użytkownika, wywołując metodę SurfaceCallback.onVisibleAreaChanged
. Aby zminimalizować liczbę zmian, host wywołuje metodę SurfaceCallback.onStableAreaChanged
z najmniejszym prostokątem, który jest zawsze widoczny w zależności od bieżącego szablonu.
Jeśli na przykład aplikacja do nawigacji używa elementu NavigationTemplate
z paskiem działań u góry, pasek działań może się ukryć, gdy użytkownik przez pewien czas nie wchodzi w interakcję z ekranem, aby zwolnić miejsce na mapę. W takim przypadku istnieje wywołanie zwrotne do onStableAreaChanged
i onVisibleAreaChanged
z tym samym prostokątem. Gdy pasek działań jest ukryty, wywoływane jest tylko wywołanie onVisibleAreaChanged
z większym obszarem. Jeśli użytkownik wejdzie w interakcję z ekranem, z pierwszym prostokątem zostanie wywołany tylko onVisibleAreaChanged
.
Obsługa trybu ciemnego
Aplikacje nawigacyjne muszą ponownie zarysować w instancji Surface
swoją mapę z odpowiednimi ciemnymi kolorami, gdy gospodarz określi odpowiednie warunki, zgodnie z opisem w sekcji Jakość aplikacji na Androida w samochodach.
Aby zdecydować, czy chcesz narysować ciemną mapę, możesz użyć metody CarContext.isDarkMode
. Po każdej zmianie stanu trybu ciemnego otrzymasz połączenie na numer Session.onCarConfigurationChanged
.
Przekazywanie metadanych nawigacji
Aplikacje nawigacyjne muszą przekazywać dodatkowe metadane nawigacji z hostem. Gospodarz wykorzystuje te informacje do dostarczania informacji do radioodtwarzacza pojazdu i zapobiegania konfliktowi z aplikacjami nawigacyjnymi o udostępnione zasoby.
Metadane nawigacji są dostarczane przez usługę samochodową NavigationManager
dostępną z poziomu CarContext
:
Kotlin
val navigationManager = carContext.getCarService(NavigationManager::class.java)
Java
NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);
Rozpoczynanie, kończenie i zatrzymywanie nawigacji
Aby host mógł zarządzać wieloma aplikacjami nawigacyjnymi, powiadomieniami o trasach i danymi klastra pojazdów, musi uwzględniać bieżący stan nawigacji. Gdy użytkownik rozpocznie nawigację, wywołaj NavigationManager.navigationStarted
.
Analogicznie, gdy zakończy się nawigacja, na przykład gdy użytkownik dotrze do miejsca docelowego lub anuluje nawigację, wywołaj NavigationManager.navigationEnded
.
Wywołuj NavigationManager.navigationEnded
dopiero wtedy, gdy użytkownik zakończy nawigację. Jeśli na przykład chcesz ponownie obliczyć trasę w trakcie podróży, użyj opcji Trip.Builder.setLoading(true)
.
Czasami host potrzebuje aplikacji, aby zatrzymać nawigację i wywołać onStopNavigation
w obiekcie NavigationManagerCallback
udostępnionym przez aplikację za pomocą NavigationManager.setNavigationManagerCallback
.
Aplikacja musi wtedy przestać przekazywać informacje o następnym zakręcie na wyświetlaczu klastra, w powiadomieniach nawigacyjnych i wskazówkach głosowych.
Zaktualizuj informacje o podróży
Podczas aktywnej nawigacji wywołaj NavigationManager.updateTrip
.
Informacje podane w tej rozmowie mogą być używane przez klaster pojazdu i wyświetlacze HUD. W zależności od używanego pojazdu
nie wszystkie informacje są wyświetlane użytkownikowi.
Na przykład na komputerze PC (DHU) wyświetla się element Step
dodany do elementu Trip
, ale nie informacje o Destination
.
Rysowanie na wyświetlaczu klastra
Aby zapewnić jak najlepsze wrażenia użytkownikom, możesz wykraczać poza wyświetlanie podstawowych metadanych na wyświetlaczu klastra pojazdu. Począwszy od poziomu 6 Car App API, aplikacje nawigacyjne mogą renderować własne treści bezpośrednio na wyświetlaczu klastra (w obsługiwanych pojazdach), ale obowiązują te ograniczenia:
- Interfejs API wyświetlania klastra nie obsługuje elementów sterujących do wprowadzania danych
- Na wyświetlaczu klastra powinny być widoczne tylko fragmenty mapy. Na tych kafelkach może być opcjonalnie wyświetlana aktywna nawigacja po trasie.
- Interfejs API wyświetlania klastra obsługuje tylko interfejs
NavigationTemplate
- W przeciwieństwie do ekranów głównych, na wyświetlaczach klastra mogą nie wyświetlać się wszystkie elementy interfejsu
NavigationTemplate
, takie jak szczegółowe instrukcje, karty z szacowanym czasem dotarcia czy działania. Jedynym elementem UI wyświetlanym w sposób spójny są elementy mapy.
- W przeciwieństwie do ekranów głównych, na wyświetlaczach klastra mogą nie wyświetlać się wszystkie elementy interfejsu
Deklarowanie obsługi klastra
Aby poinformować aplikację hostującą, że Twoja aplikacja obsługuje renderowanie na wyświetlaczach klastrów, musisz dodać element androidx.car.app.category.FEATURE_CLUSTER
<category>
do parametru <intent-filter>
CarAppService
, jak pokazano w tym fragmencie:
<application> ... <service ... android:name=".MyNavigationCarAppService" android:exported="true"> <intent-filter> <action android:name="androidx.car.app.CarAppService" /> <category android:name="androidx.car.app.category.NAVIGATION"/> <category android:name="androidx.car.app.category.FEATURE_CLUSTER"/> </intent-filter> </service> ... </application>
Zarządzanie cyklem życia i stanem
Począwszy od poziomu API 6 przepływ cyklu życia aplikacji do samochodu nie zmienia się, ale parametr CarAppService::onCreateSession
przyjmuje teraz parametr typu SessionInfo
, który dostarcza dodatkowe informacje o tworzonym elemencie Session
(czyli typ wyświetlania i zestaw obsługiwanych szablonów).
Aplikacje mogą używać tej samej klasy Session
do obsługi klastra i ekranu głównego albo utworzyć Sessions
dla określonego wyświetlacza, aby dostosować działanie na każdym wyświetlaczu (jak pokazano w tym fragmencie).
Kotlin
override fun onCreateSession(sessionInfo: SessionInfo): Session { return if (sessionInfo.displayType == SessionInfo.DISPLAY_TYPE_CLUSTER) { ClusterSession() } else { MainDisplaySession() } }
Java
@Override @NonNull public Session onCreateSession(@NonNull SessionInfo sessionInfo) { if (sessionInfo.getDisplayType() == SessionInfo.DISPLAY_TYPE_CLUSTER) { return new ClusterSession(); } else { return new MainDisplaySession(); } }
Nie ma gwarancji, kiedy i czy pojawi się wyświetlacz klastra. Klaster Session
może też być jedynym Session
(np. użytkownik zamienił główny ekran na inną aplikację, gdy Twoja aplikacja aktywnie się nawiguje). Umowa „standardowa” oznacza, że aplikacja przejmuje kontrolę nad wyświetlaniem klastra dopiero po wywołaniu funkcji NavigationManager::navigationStarted
. Aplikacja może jednak być wyświetlana w klastrze, gdy nie trwa żadna aktywna nawigacja, lub nigdy nie udostępniać tego widoku. Od Twojej aplikacji zależy radzenie sobie w tych scenariuszach przez renderowanie jej nieaktywnych elementów mapy.
Host tworzy oddzielne powiązanie i CarContext
instancje na Session
. Oznacza to, że w przypadku metod takich jak ScreenManager::push
lub Screen::invalidate
wpływa tylko na element Session
, z którego są wywoływane. Jeśli potrzebna jest komunikacja między Session
, aplikacje powinny utworzyć własne kanały komunikacji (np. przy użyciu transmisji, udostępnionego singletonu lub innej funkcji).
Obsługa klastra testowania
Wdrożoną implementację możesz przetestować zarówno na Androidzie Auto, jak i na Androidzie Automotive. W przypadku Androida Auto można to zrobić, konfigurując komputerową jednostkę główną tak, aby emulowała wyświetlacz dodatkowego klastra. W przypadku systemu operacyjnego Android Automotive ogólne obrazy systemu dla interfejsu API poziomu 30 lub nowszego emulują wyświetlanie klastra.
Dostosuj koszt podróży za pomocą tekstu lub ikony
Aby dostosować oszacowanie podróży za pomocą tekstu, ikony lub obu tych elementów, użyj metod klasy setTripIcon
lub setTripText
klasy TravelEstimate.Builder
. NavigationTemplate
korzysta z TravelEstimate
, aby opcjonalnie ustawić tekst i ikony obok szacowanego czasu przyjazdu, pozostałego czasu i pozostałej odległości.
Ten fragment kodu używa atrybutów setTripIcon
i setTripText
, aby dostosować oszacowanie podróży:
Kotlin
TravelEstimate.Builder(Distance.create(...), DateTimeWithZone.create(...)) ... .setTripIcon(CarIcon.Builder(...).build()) .setTripText(CarText.create(...)) .build()
Java
new TravelEstimate.Builder(Distance.create(...), DateTimeWithZone.create(...)) ... .setTripIcon(CarIcon.Builder(...).build()) .setTripText(CarText.create(...)) .build();
Otrzymuj powiadomienia zakręt po zakręcie
Udostępnij instrukcje nawigacji zakręt po zakręcie, używając często aktualizowanego powiadomień nawigacyjnych. Aby powiadomienie było wyświetlane na ekranie samochodu, kreator powiadomień musi wykonać te czynności:
- Oznacz powiadomienie jako trwające za pomocą metody
NotificationCompat.Builder.setOngoing
. - Ustaw kategorię powiadomienia na
Notification.CATEGORY_NAVIGATION
. - Rozszerz powiadomienie za pomocą elementu
CarAppExtender
.
W widżecie linii kolejowej u dołu ekranu samochodu pojawi się powiadomienie o nawigacji. Jeśli poziom ważności powiadomienia jest ustawiony na IMPORTANCE_HIGH
, wyświetla się też jako powiadomienie z wyprzedzeniem (HUN).
Jeśli ważność nie jest określona za pomocą metody CarAppExtender.Builder.setImportance
, używana jest waga kanału powiadomienia.
Aplikacja może ustawić element PendingIntent
w elemencie CarAppExtender
, który jest wysyłany do aplikacji, gdy użytkownik kliknie widżet HUN lub pociągu.
Jeśli funkcja NotificationCompat.Builder.setOnlyAlertOnce
zostanie wywołana z wartością true
, powiadomienie o dużym znaczeniu wyświetli się tylko raz w trakcie HUN.
Ten fragment kodu pokazuje, jak utworzyć powiadomienie o nawigacji:
Kotlin
NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), Intent(ACTION_OPEN_APP).setComponent( ComponentName(context, MyNotificationReceiver::class.java)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build()
Java
new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( new CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), new Intent(ACTION_OPEN_APP).setComponent( new ComponentName(context, MyNotificationReceiver.class)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build();
Regularnie aktualizuj powiadomienie TBT o zmianach odległości, które aktualizuje widżet pociągów i wyświetla je tylko jako HUN.
Działanie GUN możesz kontrolować, ustawiając znaczenie powiadomienia w CarAppExtender.Builder.setImportance
. Ustawienie ważności na IMPORTANCE_HIGH
powoduje uruchomienie polecenia HUN. Ustawienie jej na dowolną inną wartość powoduje tylko zaktualizowanie widżetu „kolejka”.
Odśwież zawartość elementu PlaceList NavigationTemplate
Możesz zezwolić kierowcom na odświeżanie treści jednym kliknięciem podczas przeglądania list miejsc utworzonych przy użyciu PlaceListNavigationTemplate
.
Aby włączyć odświeżanie listy, zaimplementuj metodę onContentRefreshRequested
interfejsu OnContentRefreshListener
i użyj PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
do ustawienia detektora w szablonie.
Ten fragment kodu pokazuje, jak ustawić odbiornik w szablonie:
Kotlin
PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate() } .build()
Java
new PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener(() -> { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate(); }) .build();
Przycisk odświeżania pojawia się w nagłówku elementu PlaceListNavigationTemplate
tylko wtedy, gdy detektor ma określoną wartość.
Gdy użytkownik kliknie przycisk odświeżania, wywoływana jest metoda onContentRefreshRequested
w Twojej implementacji OnContentRefreshListener
. W onContentRefreshRequested
wywołaj metodę Screen.invalidate
.
Host ten wywołuje metodę Screen.onGetTemplate
aplikacji, aby pobrać szablon z odświeżoną treścią. Więcej informacji o odświeżaniu szablonów znajdziesz w sekcji Odświeżanie zawartości szablonu. O ile następny szablon zwracany przez onGetTemplate
jest tego samego typu, liczy się to jako odświeżenie i nie wliczają się do limitu szablonu.
Wskazówki audio
Aby odtwarzać wskazówki nawigacyjne przez głośniki samochodu, aplikacja musi poprosić o zaznaczenie dźwięku. W ramach AudioFocusRequest
ustaw użycie na AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
. Dodatkowo ustaw wzmocnienie ostrości na AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
.
Symulowanie nawigacji
Aby można było zweryfikować funkcje nawigacji w aplikacji po przesłaniu jej do Sklepu Google Play, musi ona obsługiwać wywołanie zwrotne NavigationManagerCallback.onAutoDriveEnabled
. Po wywołaniu tego wywołania zwrotnego aplikacja musi symulować nawigację do wybranego miejsca docelowego, gdy użytkownik rozpocznie nawigację. Aplikacja może wyjść z tego trybu, gdy cykl życia bieżącego elementu Session
osiągnie stan Lifecycle.Event.ON_DESTROY
.
Aby sprawdzić, czy implementacja onAutoDriveEnabled
jest wywoływana, wykonaj to polecenie w wierszu poleceń:
adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE
Widać to w tym przykładzie:
adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE
Domyślna aplikacja do nawigacji
W Androidzie Auto domyślna aplikacja do nawigacji odpowiada ostatniej aplikacji nawigacyjnej uruchomionej przez użytkownika. Domyślna aplikacja odbiera intencje nawigacyjne, gdy użytkownik wywołuje polecenia nawigacyjne za pomocą Asystenta lub gdy inna aplikacja wysyła zamiar rozpoczęcia nawigacji.
Zezwalanie użytkownikom na interakcję z mapą
Możesz dodać obsługę przez użytkowników w zakresie korzystania z map, na przykład przez przybliżanie i przesuwanie jej różnych części. Każdy szablon ma inne wymaganie minimalne na poziomie interfejsu Car App API. W tabeli poniżej znajdziesz minimalny poziom szablonu, który chcesz zaimplementować.
Szablon | Obsługa interaktywności od poziomu interfejsu Car App API |
---|---|
NavigationTemplate | 2 |
PlaceListNavigationTemplate | 4 |
RoutePreviewNavigationTemplate | 4 |
MapTemplate |
5 |
Metody wywołania zwrotnego platformy
Interfejs SurfaceCallback
udostępnia kilka metod wywołania zwrotnego, które pozwalają zwiększyć interaktywność map utworzonych za pomocą szablonów NavigationTemplate
, PlaceListNavigationTemplate
, RoutePreviewNavigationTemplate
lub MapTemplate
: onClick
, onScroll
, onScale
i onFling
.
W tabeli poniżej znajdziesz informacje o tym, jak te wywołania zwrotne są powiązane z interakcjami użytkowników.
Interakcja | SurfaceCallback metoda |
Obsługiwany od poziomu interfejsu Car App API |
---|---|---|
Dotknięcie | onClick |
5 |
Zmiana powiększania ekranu przez rozsunięcie lub ściągnięcie palców | onScale |
2 |
Przeciąganie jednym kliknięciem | onScroll |
2 |
Rzut po 1 dotknięciu | onFling |
2 |
Kliknij dwukrotnie | onScale (ze współczynnikiem skali określonym przez hosta szablonu) |
2 |
Przesunięcie obrotowe w trybie przesuwania | onScroll (ze współczynnikiem odległości określonym przez hosta szablonu) |
2 |
Pasek działań na mapie
Szablony NavigationTemplate
, PlaceListNavigationTemplate
, RoutePreviewNavigationTemplate
i MapTemplate
mogą mieć pasek działań na mapie, który umożliwia takie działania jak powiększanie i pomniejszanie, wyśrodkowanie, wyświetlanie kompasu i inne działania, które chcesz wyświetlać. Pasek działań na mapie może zawierać maksymalnie 4 przyciski z samymi ikonami, które można odświeżać bez wpływu na głębię zadania. Ukrywa się w stanie bezczynności i pojawia się ponownie w stanie aktywnym.
Aby otrzymywać wywołania zwrotne interaktywności mapy, musisz dodać przycisk Action.PAN
do paska działań mapy. Gdy użytkownik naciśnie przycisk przesuwania, host przejdzie w tryb przesuwania, jak opisano w następnej sekcji.
Jeśli Twoja aplikacja pominie przycisk Action.PAN
na pasku działań mapy, nie otrzyma danych wejściowych użytkownika z metod SurfaceCallback
, a host zamknie każdy wcześniej aktywowany tryb przesuwania.
Na ekranie dotykowym przycisk przesuwania się nie wyświetla.
Tryb przesuwania
W trybie przesuwania host szablonu przekształca dane wejściowe użytkownika z niedotykowych urządzeń wejściowych, takich jak kontrolery obrotowe i touchpady, na odpowiednie metody SurfaceCallback
. Reaguj na działanie użytkownika, aby włączyć lub wyłączyć tryb przesuwania za pomocą metody setPanModeListener
w NavigationTemplate.Builder
. Gdy użytkownik jest w trybie przesuwania, host może ukrywać w szablonie inne komponenty UI.
Obszar stabilny
Obszar stabilny jest aktualizowany między stanem nieaktywnym a aktywnym. Zdecyduj, czy chcesz narysować informacje związane z jazdą (np. prędkość, ograniczenie prędkości lub ostrzeżenia drogowe) na podstawie wielkości nieruchomego obszaru, tak aby ważne informacje na mapie nie zasłaniały obszaru działań.
Wyświetl kontekstowe alerty nawigacji
Alert
wyświetla ważne informacje kierowcy z opcjonalnymi działaniami i myślnikiem bez opuszczania ekranu nawigacyjnego. Aby zapewnić kierowcom jak najlepsze wrażenia, Alert
zapobiega blokowaniu trasy i ogranicza rozpraszanie kierowcy przez NavigationTemplate
.
Usługa Alert
jest dostępna tylko w: NavigationTemplate
.
Aby powiadamiać użytkownika spoza interfejsu NavigationTemplate
, rozważ użycie powiadomienia Ostrzeżenie (HUN), zgodnie z opisem w sekcji Wyświetlanie powiadomień.
Dzięki Alert
możesz na przykład:
- Poinformuj kierowcę o aktualnościach związanych z bieżącą trasą, np. o zmianie warunków na drodze.
- Poproś kierowcę o aktualne informacje dotyczące nawigacji, np. o systemie kontroli prędkości.
- Zaproponuj nadchodzące zadanie i zapytaj, czy kierowca je akceptuje, np. czy może odebrać kogoś po drodze.
W podstawowej postaci Alert
składa się z tytułu i czasu trwania Alert
. Czas trwania jest przedstawiony w postaci paska postępu. Opcjonalnie możesz dodać podtytuł, ikonę i maksymalnie 2 obiekty Action
.
Po wyświetleniu elementu Alert
nie zostanie on przeniesiony do innego szablonu, jeśli interakcja z kierowcą spowoduje opuszczenie interfejsu NavigationTemplate
.
Pozostaje w pierwotnym stanie NavigationTemplate
, dopóki Alert
nie minie, użytkownik podejmie działanie lub aplikacja zamknie Alert
.
Utwórz alert
Użyj Alert.Builder
, aby utworzyć instancję Alert
:
Kotlin
Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build()
Java
new Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build();
Jeśli chcesz czekać na anulowanie lub odrzucenie Alert
, utwórz implementację interfejsu AlertCallback
.
Ścieżki połączeń AlertCallback
:
Jeśli limit czasu oczekiwania na
Alert
zostanie przekroczony, host wywoła metodęAlertCallback.onCancel
z wartościąAlertCallback.REASON_TIMEOUT
. Następnie wywołuje metodęAlertCallback.onDismiss
.Gdy kierowca kliknie jeden z przycisków polecenia, host wywołuje metodę
Action.OnClickListener
, a następnieAlertCallback.onDismiss
.Jeśli właściwość
Alert
nie jest obsługiwana, host wywołuje parametrAlertCallback.onCancel
z wartościąAlertCallback.REASON_NOT_SUPPORTED
. Gospodarz nie wywołuje funkcjiAlertCallback.onDismiss
, ponieważAlert
nie została wyświetlona.
Skonfiguruj czas trwania alertu
Wybierz czas trwania Alert
pasujący do potrzeb aplikacji. Zalecany czas trwania nawigacji Alert
to 10 sekund. Więcej informacji znajdziesz w artykule Alerty nawigacji.
Pokaż alert
Aby wyświetlić Alert
, wywołaj metodę AppManager.showAlert
dostępną w CarContext
aplikacji.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
- Wywołanie
showAlert
z użyciemAlert
, które ma identyfikatoralertId
taki sam jak identyfikator obecnie wyświetlanegoAlert
nie przynosi efektu.Alert
nie aktualizuje się. Aby zaktualizowaćAlert
, musisz utworzyć go ponownie z nowym elementemalertId
. - Wywołanie
showAlert
za pomocąAlert
, który ma inny identyfikatoralertId
niż obecnie wyświetlanyAlert
spowoduje zamknięcie aktualnie wyświetlanejAlert
.
Odrzucanie alertu
Alert
jest zamykany automatycznie z powodu przekroczenia limitu czasu oczekiwania lub interakcji kierowcy, ale możesz też ręcznie zamknąć Alert
, na przykład jeśli jego informacje staną się nieaktualne. Aby odrzucić metodę Alert
, wywołaj metodę dismissAlert
z alertId
: Alert
.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
Wywołanie metody dismissAlert
z numerem alertId
, które nie jest zgodne z aktualnie wyświetlanym Alert
, nie przynosi efektu. Nie robi wyjątku.