Navigations-App erstellen

Auf dieser Seite werden die verschiedenen Funktionen der Auto-App-Bibliothek beschrieben, die Sie verwenden können um die Funktionen Ihrer App für die detaillierte Routenführung zu implementieren.

Du kannst in deinem Manifest Navigationsunterstützung angeben

Deine Navigations-App muss die Berechtigung „androidx.car.app.category.NAVIGATION“ deklarieren Auto-App-Kategorie im Intent von 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>

Navigations-Intents unterstützen

Um Navigations-Intents für deine App zu unterstützen, einschließlich der von Sprachbefehle an Google Assistant senden, muss Ihre App CarContext.ACTION_NAVIGATE die Absicht, die Session.onCreateScreen und Session.onNewIntent

Weitere Informationen finden Sie in der Dokumentation zu CarContext.startCarApp um Details zum Format des Intents zu erhalten.

Auf Navigationsvorlagen zugreifen

Navigations-Apps können auf die folgenden Vorlagen zugreifen, die eine Oberfläche in Hintergrund mit der Karte und bei aktiver Navigation eine detaillierte Routenführung Wegbeschreibungen.

  • NavigationTemplate: Außerdem werden während der aktiven Navigation eine optionale Botschaft und Reiseschätzungen angezeigt.
  • MapWithContentTemplate: Eine Vorlage, die es einer App ermöglicht, Kartenkacheln mit bestimmten Inhalten (für (z. B. eine Liste). Der Inhalt wird normalerweise als Overlay Kartenkacheln mit sichtbaren und stabilen Bereichen der Karte, die sich an den Inhalt anpassen.

Weitere Informationen zur Gestaltung der Benutzeroberfläche Ihrer Navigations-App mit Weitere Informationen zu Navigations-Apps

Um Zugriff auf die Navigationsvorlagen zu erhalten, muss deine App die Berechtigung androidx.car.app.NAVIGATION_TEMPLATES in der AndroidManifest.xml-Datei:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
  ...
</manifest>

Zum Zeichnen von Karten ist eine zusätzliche Berechtigung erforderlich.

Zu MapWithContentTemplate migrieren

Ab Level 7 der Car App API MapTemplate, PlaceListNavigationTemplate, und RoutePreviewNavigationTemplate wurden eingestellt. Verworfene Vorlagen werden weiterhin unterstützt, Die Migration zur MapWithContentTemplate wird dringend empfohlen.

Die von diesen Vorlagen bereitgestellten Funktionen können mit MapWithContentTemplate. Die folgenden Snippets sind Beispiele:

Kartenvorlage

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

PlaceListNavigationTemplate

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

RoutePreviewNavigationTemplate

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

Navigations-Apps müssen zusätzliche Navigationsmetadaten mit dem Host. Der Host verwendet die Informationen, um dem und Navigationsanwendungen daran hindern, gemeinsame Ressourcen.

Navigationsmetadaten werden über das NavigationManager Autoservice über die CarContext:

Kotlin

val navigationManager = carContext.getCarService(NavigationManager::class.java)

Java

NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);

Navigation starten, beenden und beenden

Damit der Host mehrere Navigations-Apps, Routing-Benachrichtigungen, und Fahrzeug-Cluster-Daten, muss es den aktuellen Status Navigation. Wenn ein Nutzer die Navigation startet, rufen Sie NavigationManager.navigationStarted Das Gleiche gilt, wenn die Navigation endet, z. B. wenn die Nutzenden am oder der Nutzer bricht die Navigation ab. NavigationManager.navigationEnded

Nur NavigationManager.navigationEnded anrufen wenn der Nutzer die Navigation beendet hat. Wenn Sie z. B. eine neue Berechnung die Route mitten einer Fahrt berechnen, Trip.Builder.setLoading(true) .

Gelegentlich benötigt der Organisator eine App, um die Navigation und Anrufe zu beenden onStopNavigation in einem NavigationManagerCallback Objekt, das von Ihrer App über NavigationManager.setNavigationManagerCallback Die App muss dann keine Informationen zur nächsten Abbiegung mehr in der Clusteranzeige ausgeben. Navigationsbenachrichtigungen und Sprachführung.

Fahrtinformationen aktualisieren

Rufen Sie während der aktiven Navigation NavigationManager.updateTrip Die Informationen aus diesem Aufruf können vom Cluster und Warnmeldungen. Je nachdem, welches Fahrzeug gefahren wird, werden die Informationen für den Nutzer angezeigt. Auf der Desktop-Haupteinheit (DHU) wird beispielsweise die Step, die dem Trip, wird aber nicht angezeigt Destination Informationen.

Zur Clusteranzeige zeichnen

Um eine möglichst umfassende Nutzererfahrung zu bieten, Basismetadaten werden auf dem Cluster-Display des Fahrzeugs angezeigt. Ab Level 6 der Car App API können Navigations-Apps eigene Inhalte direkt auf dem Cluster-Display anzeigen (in unterstützten Fahrzeugen), wobei die folgenden Einschränkungen:

  • Die Cluster Display API unterstützt keine Eingabesteuerelemente
  • Die Cluster-Anzeige sollte nur Kartenkacheln enthalten. Eine aktive Routennavigation optional auf diesen Kacheln angezeigt werden.
  • Die Cluster-Display-API unterstützt nur die Verwendung des NavigationTemplate <ph type="x-smartling-placeholder">
      </ph>
    • Im Gegensatz zu Hauptanzeigen werden auf Cluster-Displays unter Umständen nicht alle NavigationTemplate-UI-Elemente wie detaillierte Routenführung und voraussichtliche Ankunftszeit Karten und Aktionen. Kartenkacheln sind die einzige einheitlich angezeigte UI -Elements.

Clustersupport deklarieren

Um der Hostanwendung mitzuteilen, dass Ihre Anwendung das Rendern im Cluster unterstützt angezeigt wird, müssen Sie eine androidx.car.app.category.FEATURE_CLUSTER <category>-Element zu <intent-filter> deines CarAppService hinzufügen, wie in der folgendes Snippet:

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

Lebenszyklus und Statusverwaltung

Ab API-Level 6 wird die Auto-App Lebenszyklus bleibt unverändert, aber CarAppService::onCreateSession verwendet jetzt den Parameter geben Sie SessionInfo ein, zusätzliche Informationen über den erstellten Session (nämlich die Display- -Typ und den Satz unterstützter Vorlagen).

Apps haben die Möglichkeit, dieselbe Session-Klasse zu verwenden, um sowohl die Cluster- und Hauptanzeige oder anzeigespezifische Sessions zur Anpassung erstellen wie im folgenden Snippet dargestellt wird.

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

Es gibt keine Garantien dafür, wann oder ob die Clusteranzeige bereitgestellt wird. Cluster Session kann auch der einzige Session sein (für Beispiel: Der Nutzer hat das Hauptdisplay durch eine andere App ersetzt, während Ihre App aktiv navigieren). Der „Standard“ dass die App die Kontrolle über die Cluster wird erst angezeigt, nachdem NavigationManager::navigationStarted aufgerufen. Es ist jedoch möglich, dass für die Anwendung die Cluster-Anzeige bereitgestellt wird. wenn keine aktive Navigation erfolgt oder der Cluster nie bereitgestellt wird. Display. Ihre App verarbeitet diese Szenarien, indem die inaktiven Zustand von Kartenkacheln.

Der Host erstellt einen separaten Binder und CarContext Instanzen pro Session. Dieses bedeutet, dass Sie bei Verwendung von Methoden wie ScreenManager::push oder Screen::invalidate, ist nur die Session, von der sie aufgerufen werden, betroffen sind. Apps sollten eigene Kommunikationskanäle zwischen diesen wenn eine Sessionübergreifende Kommunikation erforderlich ist (z. B. durch Broadcasts, ein gemeinsames Singleton usw. sonst).

Clusterunterstützung testen

Sie können Ihre Implementierung sowohl in Android Auto als auch in Android Automotive OS testen. Bei Android Auto erfolgt dies durch Konfigurieren der Desktop-Haupteinheit, die emulieren soll eine sekundäre Clusteranzeige. Für Android Automotive OS, die Allgemeine System-Images für API ab Level 30 eine Clusteranzeige emulieren.

Individuelle Reiseschätzung mit einem Text oder einem Symbol

Um die Schätzung für die Reise mit Text, einem Symbol oder beidem anzupassen, verwenden Sie die TravelEstimate.Builder Kurs setTripIcon oder setTripText . Die NavigationTemplate Verwendungen TravelEstimate Text und Symbole neben oder anstelle der geschätzten Zeit festlegen Ankunft, verbleibende Zeit und verbleibende Strecke.

<ph type="x-smartling-placeholder">
</ph>
Abbildung 1: Reiseschätzung mit benutzerdefiniertem Symbol und Text.

Im folgenden Snippet werden setTripIcon und setTripText verwendet, um den Parameter Geschätzte Reise:

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

Detaillierte Benachrichtigungen bereitstellen

Detaillierte Routenführung mit häufigem aktualisierte Navigationsbenachrichtigung. Wird als Navigation verwendet auf dem Autodisplay angezeigt wird, muss der Entwickler der Benachrichtigung Folgendes:

  1. Markieren Sie die Benachrichtigung mit dem NotificationCompat.Builder.setOngoing .
  2. Legen Sie als Kategorie der Benachrichtigung Notification.CATEGORY_NAVIGATION fest.
  3. Benachrichtigung um einen CarAppExtender

Im Schienen-Widget unten auf dem Bildschirm wird eine Navigationsbenachrichtigung angezeigt. über das Autodisplay. Die Wichtigkeitsstufe der Benachrichtigung ist festgelegt auf IMPORTANCE_HIGH, wird auch eine Vorabbenachrichtigung (HUN) angezeigt. Wenn die Wichtigkeit nicht mit dem CarAppExtender.Builder.setImportance die Methode Wichtigkeit des Benachrichtigungskanals verwendet wird.

Die App kann ein PendingIntent im CarAppExtender das wird an die App gesendet, wenn der Nutzer auf das HUN- oder das Rail-Widget tippt.

Wenn NotificationCompat.Builder.setOnlyAlertOnce mit dem Wert true aufgerufen wird, wird nur eine Benachrichtigung einmal bei der HUN.

Das folgende Snippet zeigt, wie eine Navigationsbenachrichtigung erstellt wird:

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

Aktualisieren Sie die TBT-Benachrichtigung regelmäßig für die Entfernung. ändert, wodurch das Widget für Bahnen aktualisiert und die Benachrichtigung nur als HUN angezeigt wird. Sie können das HUN-Verhalten steuern, indem Sie die Wichtigkeit der Benachrichtigung mit CarAppExtender.Builder.setImportance Einstellen der Wichtigkeit auf IMPORTANCE_HIGH zeigt eine HUN. Einstellung wird nur das Rail-Widget aktualisiert.

„PlaceListNavigationTemplate“-Inhalt aktualisieren

Du kannst zulassen, dass Fahrer Inhalte beim Surfen mit nur einmal tippen auf eine Schaltfläche aktualisieren Listen mit Orten, die mit PlaceListNavigationTemplate Um die Aktualisierung der Liste zu aktivieren, implementieren Sie die OnContentRefreshListener Schnittstelle onContentRefreshRequested und verwenden Sie PlaceListNavigationTemplate.Builder.setOnContentRefreshListener um den Listener für die Vorlage festzulegen.

Das folgende Snippet zeigt, wie der Listener für die Vorlage festgelegt wird:

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

Die Schaltfläche zum Aktualisieren wird nur in der Kopfzeile der Seite PlaceListNavigationTemplate, wenn der Listener einen Wert hat.

Wenn der Nutzer auf die Schaltfläche zum Aktualisieren klickt, onContentRefreshRequested Methode Ihres OnContentRefreshListener-Implementierung wird aufgerufen. Innerhalb von onContentRefreshRequested, die Funktion Screen.invalidate-Methode. Der Host ruft dann die Screen.onGetTemplate , um die Vorlage mit dem aktualisierten Inhalt abzurufen. Weitere Informationen finden Sie unter Aktualisieren Sie den Inhalt einer Vorlage für: finden Sie weitere Informationen zum Aktualisieren von Vorlagen. Solange die nächste Vorlage zurückgegeben von onGetTemplate ist von vom gleichen Typ ist, wird eine Aktualisierung gewertet und nicht Vorlagenkontingent.

Audioführung anbieten

Damit die Navigationsführung über die Autolautsprecher wiedergegeben werden kann, muss deine App Folgendes anfordern: Audiofokus. Im Rahmen Ihrer AudioFocusRequest, festgelegt die Nutzung als AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE. Außerdem Legen Sie die Fokusverstärkung auf AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK fest.

Navigation simulieren

Um die Navigationsfunktionalität Ihrer App zu überprüfen, wenn Sie sie an den Google Play Store verwendet haben, muss Ihre App das NavigationManagerCallback.onAutoDriveEnabled Callback des Nutzers an. Wenn dieser Callback aufgerufen wird, muss deine App die Navigation zu wenn Nutzende die Navigation starten. Deine App kann diese Aktion beenden wenn der Lebenszyklus des aktuellen Session erreicht die Lifecycle.Event.ON_DESTROY Bundesstaat.

Sie können testen, ob Ihre Implementierung von onAutoDriveEnabled aufgerufen wird, indem Sie führen Sie Folgendes über eine Befehlszeile aus:

adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE

Dies wird im folgenden Beispiel gezeigt:

adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE

Standard-Navigations-App für Autos

In Android Auto entspricht die Standardnavigations-App des Autos der letzten Navigations-App, die die Nutzenden gestartet haben. Die Standard-App erhält Navigations-Intents, wenn der Nutzer Navigationsbefehle über Assistant aufruft oder wenn eine andere App eine die Navigation zu starten.

Kontextbezogene Navigationsbenachrichtigungen anzeigen

Alert zeigt wichtige Informationen mit optionalen Aktionen an den Fahrer, ohne den Kontext des auf dem Navigationsbildschirm. Um dem Fahrer das bestmögliche Erlebnis zu bieten, Alert funktioniert innerhalb der NavigationTemplate damit die Navigationsroute nicht verdeckt wird und der Fahrer weniger abgelenkt wird.

Alert ist nur innerhalb von NavigationTemplate verfügbar. So benachrichtigen Sie einen Nutzer außerhalb von NavigationTemplate: sollten Sie eine Vorabbenachrichtigung (HUN) verwenden, wie in den Benachrichtigungen anzeigen.

Verwenden Sie Alert beispielsweise für Folgendes:

  • Informieren Sie den Fahrer über ein Update, das für die aktuelle Navigation relevant ist, z. B. Änderung der Verkehrslage hat.
  • Bitte den Fahrer um ein Update zur aktuellen Navigation, z. B. einen Blitzer gibt.
  • eine bevorstehende Aufgabe vorzuschlagen und zu fragen, ob der Fahrer sie akzeptiert, z. B. ob der Fahrer bereit ist, jemanden auf dem Weg abzuholen.

In seiner Grundform besteht ein Alert aus einem Titel und dem Alert Dauer Die Dauer wird als Fortschrittsanzeige dargestellt. Optional: kannst du eine Unterüberschrift, ein Symbol und bis zu zwei Action-Objekte.

<ph type="x-smartling-placeholder">
</ph>
Abbildung 2: Kontextbezogene Navigationsbenachrichtigung.

Sobald ein Alert angezeigt wird, wird es nicht mehr in eine andere Vorlage übernommen, wenn führt dazu, dass die NavigationTemplate verlassen wird. Es bleibt im ursprünglichen NavigationTemplate, bis Alert das Zeitlimit überschreitet, der Nutzer eine Aktion durchführt oder die App die Alert schließt.

Benachrichtigung erstellen

Alert.Builder verwenden um eine Alert-Instanz zu erstellen:

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

Wenn du Alert hören möchtest Kündigung oder Ablehnung ist, implementieren Sie die AlertCallback-Oberfläche. Die AlertCallback-Aufrufpfade sind:

Benachrichtigungsdauer konfigurieren

Wähle für Alert eine Dauer aus, den Anforderungen Ihrer App entspricht. Die empfohlene Dauer einer Navigation Alert sind 10 Sekunden. Weitere Informationen finden Sie unter Navigationswarnungen. .

Benachrichtigung anzeigen

Um ein Alert anzuzeigen, rufen Sie die Methode AppManager.showAlert über die App-Erweiterung CarContext

// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
  • showAlert wird mit einer Alert aufgerufen, die ein alertId die mit der ID der derzeit angezeigten Alert übereinstimmt, hat keine Auswirkung. Alert wird nicht aktualisiert. Zum Aktualisieren einer Alert müssen Sie sie neu erstellen mit einem neuen alertId.
  • showAlert wird mit einer Alert aufgerufen, die eine andere Wenn alertId als die derzeit angezeigten Alert angezeigt wird, Aktuell wird Alert angezeigt.

Benachrichtigung schließen

Während ein Alert automatisch geschlossen wird, oder eine Interaktion durch den Fahrer verursacht haben, kannst du Alert, z. B. wenn die Informationen veraltet sind. So schließen Sie eine Alert, die Funktion dismissAlert mit der Methode alertId der Alert.

// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())

dismissAlert wird mit einer alertId aufgerufen, die nicht der aktuellen Angezeigte Alert hat keine Auswirkungen. Es wird keine Ausnahme ausgelöst.