Utwórz aplikację nawigacyjną

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();

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 .

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ść.

Rysunek 1. Prognoza dotycząca podróży z niestandardową ikoną i tekstem.

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ć :

  1. Oznacz powiadomienie jako trwające wraz z NotificationCompat.Builder.setOngoing .
  2. Ustaw kategorię powiadomienia na Notification.CATEGORY_NAVIGATION.
  3. 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.

Rysunek 2. Alert nawigacji w kontekście.

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:

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żytkownikiem Alert, który ma alertId. który jest taki sam jak identyfikator elementu Alert, który jest obecnie wyświetlany. Alert się nie aktualizuje. Aby zaktualizować Alert, musisz ponownie utworzyć za pomocą nowego urządzenia alertId.
  • Dzwonię pod numer showAlert z numerem Alert, który ma inny alertId niż Alert aktualnie wyświetlane, spowoduje zamknięcie Wyświetlane obecnie Alert.

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.