Na tej stronie znajdziesz szczegółowe informacje o różnych funkcjach biblioteki aplikacji samochodowej, z których możesz korzystać na wdrożenie funkcji aplikacji do szczegółowej nawigacji.
Zadeklaruj obsługę nawigacji w pliku manifestu
Aplikacja do nawigacji musi zadeklarować androidx.car.app.category.NAVIGATION
kategoria aplikacji samochodu w zamiarze
filtr jego 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 nawigacji
Aby obsługiwać intencje nawigacji do Twojej aplikacji, w tym te pochodzące z
za pomocą zapytań głosowych przez Asystenta Google, aplikacja musi obsługiwać
CarContext.ACTION_NAVIGATE
w swoich zamiarach
Session.onCreateScreen
oraz
Session.onNewIntent
.
Wyświetl dokumentację na temat
CarContext.startCarApp
.
Dostęp do szablonów nawigacji
Aplikacje do nawigacji mają dostęp do tych szablonów, które wyświetlają się w tło z mapą i, podczas aktywnej nawigacji, zakręt po zakręcie, wskazówek dojazdu.
NavigationTemplate
: Wyświetla też opcjonalny komunikat informacyjny i prognozę podróży podczas aktywnej nawigacji.MapWithContentTemplate
: Szablon, który pozwala aplikacji renderować fragmenty mapy z jakąś treścią (na np. listę). Treści są zwykle renderowane w formie nakładki na fragmenty mapy, z widoczną mapą, a stabilne obszary dostosowujące się do zawartości.
Więcej informacji o zaprojektowaniu interfejsu aplikacji nawigacyjnej za pomocą aby dowiedzieć się więcej, zobacz Aplikacje do nawigacji.
Aby uzyskać dostęp do szablonów nawigacji, aplikacja musi zadeklarować
uprawnienia androidx.car.app.NAVIGATION_TEMPLATES
w
Plik AndroidManifest.xml
:
<manifest ...>
...
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
...
</manifest>
Do rysowania map wymagane są dodatkowe uprawnienia.
Migracja do szablonu MapWithContentTemplate
Począwszy od poziomu 7 interfejsu Car App API,
MapTemplate
PlaceListNavigationTemplate
,
i RoutePreviewNavigationTemplate
zostały wycofane. Wycofane szablony będą nadal obsługiwane, ale
Zdecydowanie zalecamy migrację do MapWithContentTemplate
.
Funkcje dostępne w szablonach można zaimplementować
za pomocą funkcji MapWithContentTemplate
. Przykłady znajdziesz w tych fragmentach kodu:
Szablon mapy
Kotlin
// MapTemplate (deprecated) val template = MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(mapController) .build()
Java
// MapTemplate (deprecated) MapTemplate template = new MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) build()) .setActionStrip(actionStrip) .setMapController(mapController) .build();
Szablon nawigacji na liście miejsc
Kotlin
// PlaceListNavigationTemplate (deprecated) val template = PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// PlaceListNavigationTemplate (deprecated) PlaceListNavigationTemplate template = new PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
Szablon nawigacji podglądu trasy
Kotlin
// RoutePreviewNavigationTemplate (deprecated) val template = RoutePreviewNavigationTemplate.Builder() .setItemList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .build()) .build()) .setHeader(header) .setNavigateAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .addAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .build()) .build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// RoutePreviewNavigationTemplate (deprecated) RoutePreviewNavigationTemplate template = new RoutePreviewNavigationTemplate.Builder() .setItemList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .build()) .build()) .setHeader(header) .setNavigateAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .addAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .build()) .build())) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
Przekaż metadane nawigacyjne
Aplikacje do nawigacji muszą przekazać dodatkowe metadane nawigacji hosta. Gospodarz wykorzystuje te dane, aby przekazać radio pojazdu i zapobiegające kolizowaniu się aplikacji nawigacyjnych. udostępnione zasoby.
Metadane nawigacyjne są dostarczane przez
NavigationManager
usługa samochodowa dostępna z
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 do nawigacji,
i danych klastra pojazdów, musi znać bieżący stan
nawigacji. Gdy użytkownik rozpocznie nawigację,
NavigationManager.navigationStarted
Analogicznie po zakończeniu nawigacji, np. gdy użytkownik dotarł do
lub anuluje nawigację,
NavigationManager.navigationEnded
Zadzwoń tylko pod numer NavigationManager.navigationEnded
gdy użytkownik zakończy nawigację. Na przykład, jeśli musisz ponownie obliczyć
trasy w trakcie podróży, użyj funkcji
Trip.Builder.setLoading(true)
.
Czasami host potrzebuje aplikacji, by zatrzymać nawigację i nawiązywać połączenia
onStopNavigation
w:
NavigationManagerCallback
.
obiekt dostarczony przez aplikację przez
NavigationManager.setNavigationManagerCallback
Aplikacja musi wtedy przestać podawać informacje o następnym zakręcie na wyświetlaczu klastra,
powiadomienia nawigacji i wskazówki głosowe.
Zaktualizuj informacje o podróży
Podczas aktywnej nawigacji połącz się
NavigationManager.updateTrip
Informacji podanych w tej rozmowie można użyć w grupie pojazdu
wyświetlaczach HUD. W zależności od konkretnego pojazdu, nie wszystkie
informacje są wyświetlane użytkownikowi.
Na przykład panel DHU pokazuje
element Step
dodany do
Trip
, ale się nie wyświetla
Destination
i informacjami o nich.
Rysowanie do wyświetlania klastra
Aby zapewnić użytkownikom jak najlepsze wrażenia, możesz pójść o krok dalej wyświetlanie podstawowych metadanych na wyświetlaczu w zestawie pojazdu. Począwszy od interfejsu Car App API poziomu 6, aplikacje nawigacyjne mają opcję renderowania własne treści bezpośrednio na wyświetlaczu klastra (w obsługiwanych pojazdach), a przy tym następujące ograniczenia:
- Interfejs API wyświetlania klastra nie obsługuje elementów sterujących danymi wejściowymi
- Ekran klastra powinien pokazywać tylko fragmenty mapy. Aktywna nawigacja po trasie może mogą być opcjonalnie wyświetlane na tych kafelkach.
- Interfejs Klaster displayowy API obsługuje tylko
NavigationTemplate
- .
- W przeciwieństwie do głównych wyświetlaczy wyświetlacze klastrów mogą nie wyświetlać spójnie wszystkich
NavigationTemplate
elementów interfejsu, takich jak szczegółowe instrukcje, szacowany czas dotarcia na miejsce; karty i działania. Fragmenty mapy to jedyne spójnie wyświetlane UI .
- W przeciwieństwie do głównych wyświetlaczy wyświetlacze klastrów mogą nie wyświetlać spójnie wszystkich
Zadeklaruj obsługę klastra
Aby powiadomić aplikację hosta, że obsługuje ona renderowanie w klastrze
musisz dodać androidx.car.app.category.FEATURE_CLUSTER
<category>
do elementu <intent-filter>
pakietu CarAppService
, jak widać w tabeli
ten fragment:
<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, aplikacja do obsługi samochodu
cykl życia
pozostaje bez zmian, ale teraz CarAppService::onCreateSession
przyjmuje parametr
wpisz SessionInfo
, która zawiera
dodatkowe informacje na temat tworzonego elementu Session
(czyli wyświetlanie
i zestaw obsługiwanych szablonów).
Aplikacje mogą używać tej samej klasy Session
do obsługi
w klastrze i wyświetlaczu głównym lub utwórz dla reklam displayowych element Sessions
, aby dostosować
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 zostanie udostępniony wyświetlacz klastra.
jest też możliwe, że klaster Session
jest jedynym Session
(dla
– użytkownik przełączył główny wyświetlacz na inną aplikację, gdy aplikacja
podczas aktywnej nawigacji). „Standardowy” jest to, że aplikacja przejmuje kontrolę
wyświetlenie klastra dopiero po tym czasie, gdy wartość parametru NavigationManager::navigationStarted
została ustawiona
. Aplikacja może jednak udostępnić ekran klastra
gdy nie ma aktywnej nawigacji lub nigdy nie zostanie udostępniony
wyświetlacz. Od Twojej aplikacji zależy, czy będzie ona radzić sobie w tych sytuacjach,
bezczynności fragmentów mapy.
Host tworzy osobne powiązanie i instancje CarContext
na Session
. Ten
oznacza, że gdy używasz metod takich jak ScreenManager::push
lub
Screen::invalidate
, tylko Session
, z którego są wywoływane,
dotkniętych problemem. Aplikacje powinny tworzyć własne kanały komunikacji między tymi
w przypadku, gdy potrzebna jest komunikacja między Session
(na przykład
transmisje, wspólny singleton lub coś takiego
).
Obsługa klastra testowania
Możesz przetestować implementację w systemie operacyjnym Android Auto i Android Automotive. W Androidzie Auto odbywa się to przez skonfigurowanie centrali komputerowej tak, aby emulowała tę funkcję wyświetlacz klastra dodatkowego. Dla: system operacyjny Android Automotive, ogólnych obrazów systemu dla interfejsu API. na poziomie 30 i wyższych emulacji wyświetlacza klastra.
Dostosuj oszacowanie podróży za pomocą tekstu lub ikony
Aby dostosować oszacowanie podróży za pomocą tekstu, ikony lub obu tych elementów, skorzystaj z
TravelEstimate.Builder
zajęcia
setTripIcon
lub
setTripText
.
NavigationTemplate
zastosowania
TravelEstimate
opcjonalnie możesz ustawić tekst i ikony obok szacowanego czasu lub w jego miejsce
przylotu, pozostały czas i odległość.
Ten fragment kodu używa znaczników setTripIcon
i setTripText
, aby dostosować
szacowana długość 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ępniaj szczegółowe wskazówki nawigacji, często używając Zaktualizowano powiadomienie nawigacji. Jest traktowany jako nawigacja na ekranie samochodu, kreator powiadomień musi wykonać :
- Oznacz powiadomienie jako trwające wraz z
NotificationCompat.Builder.setOngoing
. - Ustaw kategorię powiadomienia na
Notification.CATEGORY_NAVIGATION
. - Rozwiń powiadomienie o
CarAppExtender
Powiadomienie nawigacji wyświetli się w widżecie kolei na dole
na ekranie samochodu. Jeśli poziom ważności powiadomienia jest ustawiony na
IMPORTANCE_HIGH
, wyświetla się również jako powiadomienie HUD.
Jeśli znaczenie nie jest ustawione za pomocą parametru
CarAppExtender.Builder.setImportance
metoda
znaczenie kanału powiadomień
i zgody na określone zastosowania ich danych.
Aplikacja może ustawić PendingIntent
w
CarAppExtender
tam
jest wysyłany do aplikacji, gdy użytkownik kliknie HUN lub widżet rail.
Jeśli
NotificationCompat.Builder.setOnlyAlertOnce
jest wywoływane z wartością true
, są wysyłane tylko alerty o dużej ważności
tylko raz w HUN.
Z tego fragmentu kodu dowiesz się, jak utworzyć powiadomienie nawigacyjne:
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 powiadomienia o odległości
zmian, co powoduje zaktualizowanie widżetu kolei i wyświetlanie powiadomienia tylko jako pliku HUN.
Działaniem HUN możesz kontrolować, ustawiając ważność powiadomienia za pomocą
CarAppExtender.Builder.setImportance
Ustawianie ważności na
IMPORTANCE_HIGH
pokazuje HUN. Ustawienie
do dowolnej innej wartości powoduje tylko zaktualizowanie widżetu kolei.
Odświeżenie zawartości szablonu PlaceListNavigationTemplate
Możesz pozwolić kierowcom na odświeżanie treści jednym kliknięciem podczas przeglądania
Listy miejsc zbudowanych za pomocą
PlaceListNavigationTemplate
Aby włączyć odświeżanie listy, zaimplementuj funkcję
OnContentRefreshListener
interfejsu
onContentRefreshRequested
i zastosowania
PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
, aby ustawić detektor w szablonie.
Ten fragment kodu pokazuje, jak ustawić detektor 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 jest widoczny tylko w nagłówku sekcji
PlaceListNavigationTemplate
, jeśli detektor ma wartość.
Gdy użytkownik kliknie przycisk odświeżania,
Metoda onContentRefreshRequested
na
Wywoływana jest implementacja OnContentRefreshListener
. W ciągu
onContentRefreshRequested
, wywołaj
Metoda Screen.invalidate
.
Host następnie oddzwoni do Twojej aplikacji
Screen.onGetTemplate
do pobrania szablonu z odświeżoną treścią. Zobacz
Odśwież zawartość szablonu dla:
znajdziesz więcej informacji o odświeżaniu szablonów. Jeśli następny szablon
zwrócone przez
onGetTemplate
jest
tego samego typu, liczy się jako odświeżenie i nie wliczają się
limit szablonu.
Włącz wskazówki audio
Aby odtworzyć wskazówki nawigacyjne na głośnikach samochodu, aplikacja musi:
obiektyw audio. W ramach
AudioFocusRequest
, ustaw
wykorzystanie jako AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
. Oprócz tego:
ustaw wzmocnienie ostrości na AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
.
Symulowanie nawigacji
Aby sprawdzić funkcje nawigacji po przesłaniu aplikacji do
Sklepu Google Play, aplikacja musi implementować
NavigationManagerCallback.onAutoDriveEnabled
oddzwanianie. Gdy to wywołanie zwrotne jest wywoływane, aplikacja musi symulować nawigację do
wybranego miejsca docelowego, gdy użytkownik rozpocznie nawigację. Aplikacja może z tego wyjść
trybu zawsze, gdy cykl życia bieżącego Session
dociera do
Lifecycle.Event.ON_DESTROY
stanu.
Możesz sprawdzić, czy implementacja onAutoDriveEnabled
jest wywoływana przez
wykonując następujące polecenie z poziomu wiersza 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 samochodzie
W Androidzie Auto domyślna aplikacja do nawigacji samochodowej odpowiada ostatniemu uruchomioną przez użytkownika aplikację do nawigacji. Domyślna aplikacja otrzymuje intencje związane z nawigacją, wywołuje polecenia nawigacyjne za pomocą Asystenta lub gdy inna aplikacja wysyła do rozpoczęcia nawigacji.
Wyświetlaj alerty nawigacji w kontekście
Alert
wyświetla ważne
przekazać kierowcy informacje za pomocą działań opcjonalnych, bez opuszczania kontekstu
ekranu nawigacyjnego. Aby zapewnić kierowcy najlepsze wrażenia,
Alert
działa w:
NavigationTemplate
.
aby uniknąć zablokowania trasy nawigacyjnej i zminimalizować ryzyko rozpraszania uwagi kierowcy.
Usługa Alert
jest dostępna tylko w domenie NavigationTemplate
.
Aby powiadomić użytkownika poza organizacją NavigationTemplate
,
rozważ użycie powiadomień HUD, jak to wyjaśniliśmy
Wyświetlanie powiadomień.
Alert
pozwala na przykład:
- Poinformuj kierowcę o aktualizacji zgodnej z bieżącą funkcją nawigacji, np. zmiany warunków na drodze.
- Poproś kierowcę o aktualizację dotyczącą bieżącej nawigacji, np. urządzenie do kontroli prędkości.
- Zaproponuj najbliższe zadanie i zapytaj kierowcę, czy je akceptuje. np. czy kierowca chce odebrać kogoś po drodze.
W podstawowej postaci obiekt Alert
składa się z tytułu i elementu Alert
.
czas trwania kampanii. Jest on przedstawiony na pasku postępu. Opcjonalnie:
możesz dodać napisy, ikonę i maksymalnie
Action
obiektów.
Po wyświetleniu szablonu Alert
nie jest on przenoszony do innego szablonu, jeśli
interakcja z kierowcą powoduje opuszczenie urządzenia NavigationTemplate
.
Pozostają one w pierwotnym NavigationTemplate
do upłynięcia Alert
czasu, użytkownik
wykona działanie lub aplikacja odrzuci Alert
.
Utwórz alert
Użyj formatu 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 posłuchać: Alert
o anulowaniu lub odmowie, należy utworzyć implementację
Interfejs AlertCallback
.
Ścieżki wywołania AlertCallback
:
Jeśli
Alert
przekroczy limit czasu, host wywoła funkcjęAlertCallback.onCancel
. za pomocą funkcjiAlertCallback.REASON_TIMEOUT
. Następnie wywołuje metodęAlertCallback.onDismiss
.Jeśli kierowca kliknie jeden z przycisków polecenia, host nawiąże połączenie
Action.OnClickListener
a następnie dzwoni pod numerAlertCallback.onDismiss
.Jeśli
Alert
nie jest obsługiwany, host wywołujeAlertCallback.onCancel
zAlertCallback.REASON_NOT_SUPPORTED
. . Organizator nie dzwoniAlertCallback.onDismiss
, ponieważAlert
się nie wyświetla.
Skonfiguruj czas trwania alertu
Wybierz okres Alert
, w którym
odpowiada potrzebom Twojej aplikacji. Zalecany czas trwania nawigacji
Alert
to 10 sekund. Zobacz Alerty nawigacyjne.
.
Pokaż alert
Aby wyświetlić element Alert
, wywołaj funkcję
AppManager.showAlert
metody dostępnej w
CarContext
.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
- Dzwonię pod numer
showAlert
z użytkownikiemAlert
, który maalertId
. który jest taki sam jak identyfikator elementuAlert
, który jest obecnie wyświetlany.Alert
się nie aktualizuje. Aby zaktualizowaćAlert
, musisz ponownie utworzyć za pomocą nowego urządzeniaalertId
. - Dzwonię pod numer
showAlert
z numeremAlert
, który ma innyalertId
niżAlert
aktualnie wyświetlane, spowoduje zamknięcie Wyświetlane obecnieAlert
.
Odrzucanie alertu
Gdy Alert
zamyka się automatycznie
z powodu przekroczenia czasu oczekiwania lub interakcji z kierowcą, możesz też ręcznie zamknąć
Alert
, na przykład jeśli zawarte w nim informacje staną się nieaktualne. Aby odrzucić
Alert
, wywołaj
dismissAlert
.
za pomocą funkcji
alertId
Alert
.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
Dzwonię pod dismissAlert
z numerem alertId
, który nie jest zgodny z bieżącym
wyświetlono: Alert
. Nie spowoduje to zgłoszenia wyjątku.