Navigations-App erstellen

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

Navigationsunterstützung im Manifest deklarieren

Deine Navigations-App muss im Intent-Filter ihres CarAppService-Objekts die Kategorie „Auto-App“ androidx.car.app.category.NAVIGATION deklarieren:

<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

Damit Navigations-Intents zu Ihrer App unterstützt werden, einschließlich derjenigen, die von Google Assistant per Sprachbefehl stammen, muss die App den CarContext.ACTION_NAVIGATE-Intent in Session.onCreateScreen und Session.onNewIntent verarbeiten.

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

Auf Navigationsvorlagen zugreifen

Navigations-Apps können auf die folgenden speziell für Navigations-Apps erstellten Vorlagen zugreifen. Alle diese Vorlagen zeigen im Hintergrund eine Oberfläche mit der Karte und bei aktiver Navigation eine detaillierte Routenführung an.

  • NavigationTemplate: Bei aktiver Navigation werden außerdem eine optionale Meldung und die geschätzten Reisekosten angezeigt.
  • MapTemplate: Stellt eine kompakte Version einer Liste (z. B. ListTemplate) oder eines Bereichs (detaillierte Informationen mit hervorgehobenen Aktionen wie in PaneTemplate) neben einer Karte dar.
  • PlaceListNavigationTemplate: Damit wird auch eine Liste von Orten angezeigt, denen entsprechende Markierungen auf der Karte gezeichnet werden können.
  • RoutePreviewNavigationTemplate: Außerdem wird eine Liste mit Routen angezeigt, von denen eine ausgewählt und auf der Karte markiert werden kann.

Weitere Informationen dazu, wie Sie die Benutzeroberfläche Ihrer Navigations-App mit diesen Vorlagen entwerfen, finden Sie unter Navigations-Apps.

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

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

Karte zeichnen

Navigations-Apps können auf Surface zugreifen, um die Karte in relevanten Vorlagen zu zeichnen.

Auf ein SurfaceContainer-Objekt kann dann zugegriffen werden, indem eine SurfaceCallback-Instanz im AppManager-Autodienst festgelegt wird:

Kotlin

carContext.getCarService(AppManager::class.java).setSurfaceCallback(surfaceCallback)

Java

carContext.getCarService(AppManager.class).setSurfaceCallback(surfaceCallback);

SurfaceCallback bietet einen Callback, wenn SurfaceContainer verfügbar ist, sowie weitere Callbacks, wenn sich die Attribute des Surface ändern.

Damit Sie auf die Oberfläche zugreifen können, muss Ihre App die Berechtigung androidx.car.app.ACCESS_SURFACE in der Datei AndroidManifest.xml deklarieren:

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

Sichtbarer Bereich der Karte

Der Host kann Benutzeroberflächenelemente für die Vorlagen über die Karte zeichnen. Durch Aufrufen der Methode SurfaceCallback.onVisibleAreaChanged kommuniziert der Host den Bereich, der für den Nutzer garantiert nicht verdeckt und vollständig sichtbar ist. Um die Anzahl der Änderungen zu minimieren, ruft der Host außerdem die Methode SurfaceCallback.onStableAreaChanged mit dem kleinsten Rechteck auf, das auf der aktuellen Vorlage immer sichtbar ist.

Wenn beispielsweise in einer Navigations-App NavigationTemplate mit einer Aktionsleiste oben verwendet wird, kann sie sich selbst ausblenden, wenn der Nutzer eine Zeit lang nicht mit dem Bildschirm interagiert hat, um mehr Platz für die Karte zu schaffen. In diesem Fall gibt es einen Callback für onStableAreaChanged und onVisibleAreaChanged mit demselben Rechteck. Bei ausgeblendeter Aktionsleiste wird nur onVisibleAreaChanged mit dem größeren Bereich aufgerufen. Wenn der Nutzer mit dem Bildschirm interagiert, wird auch hier nur onVisibleAreaChanged mit dem ersten Rechteck aufgerufen.

Dunklen Modus unterstützen

Navigations-Apps müssen ihre Karte mit den richtigen dunklen Farben neu auf der Surface-Instanz zeichnen, wenn der Host die Bedingungen dafür rechtfertigt, wie unter Android-App-Qualität für Autos beschrieben.

Mit der Methode CarContext.isDarkMode können Sie entscheiden, ob Sie eine dunkle Karte zeichnen möchten. Wenn sich der Status des dunklen Modus ändert, erhalten Sie einen Aufruf von Session.onCarConfigurationChanged.

Navigationsanwendungen müssen dem Host zusätzliche Navigationsmetadaten senden. Der Host verwendet die Informationen, um dem Infotainmentsystem des Fahrzeugs Informationen bereitzustellen und zu verhindern, dass Navigationsanwendungen über gemeinsam genutzte Ressourcen in Konflikt geraten.

Navigationsmetadaten werden über den NavigationManager-Autodienst bereitgestellt, der über CarContext zugänglich ist:

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, Routingbenachrichtigungen und Fahrzeugclusterdaten verwalten kann, muss er den aktuellen Navigationsstatus kennen. Wenn ein Nutzer die Navigation startet, rufen Sie NavigationManager.navigationStarted auf. Rufen Sie entsprechend NavigationManager.navigationEnded auf, wenn die Navigation endet, z. B. wenn der Nutzer sein Ziel erreicht oder die Navigation abbricht.

Rufen Sie NavigationManager.navigationEnded nur dann auf, wenn der Nutzer die Navigation beendet hat. Wenn Sie beispielsweise die Route während der Fahrt neu berechnen müssen, verwenden Sie stattdessen Trip.Builder.setLoading(true).

Gelegentlich benötigt der Host eine App, um die Navigation zu beenden, und ruft onStopNavigation in einem NavigationManagerCallback-Objekt auf, das von deiner App über NavigationManager.setNavigationManagerCallback bereitgestellt wird. Die App darf dann keine Informationen zur nächsten Abbiegung mehr auf der Clusteranzeige, in Navigationsbenachrichtigungen und in der Sprachführung ausgeben.

Reiseinformationen aktualisieren

Rufen Sie während der aktiven Navigation NavigationManager.updateTrip auf. Die in diesem Aufruf angegebenen Informationen können vom Cluster und von der Hauptanzeige des Fahrzeugs verwendet werden. Je nachdem, um welches Fahrzeug es fährt, werden dem Nutzer nicht alle Informationen angezeigt. Die Desktop-Haupteinheit (Desktop Head Unit, DHU) zeigt beispielsweise das zu Trip hinzugefügte Step, aber nicht die Destination-Informationen an.

Zur Clusteranzeige zeichnen

Für eine möglichst umfassende Nutzererfahrung sollten Sie auf dem Cluster-Display des Fahrzeugs nicht nur grundlegende Metadaten anzeigen. Ab Car App API Level 6 haben Navigations-Apps die Möglichkeit, eigene Inhalte direkt auf dem Clusterdisplay (in unterstützten Fahrzeugen) zu rendern. Dabei gelten die folgenden Einschränkungen:

  • Die Cluster Display API unterstützt keine Eingabesteuerelemente.
  • In der Clusteranzeige sollten nur Kartenkacheln angezeigt werden. Eine aktive Routennavigation kann optional auf diesen Kacheln angezeigt werden.
  • Die Cluster Display API unterstützt nur die Verwendung des NavigationTemplate
    • Im Gegensatz zu Hauptdisplays werden auf Cluster-Displays möglicherweise nicht alle NavigationTemplate-UI-Elemente wie detaillierte Anleitungen, voraussichtliche Ankunftszeiten und Aktionen angezeigt. Kartenkacheln sind das einzige UI-Element, das einheitlich angezeigt wird.

Clusterunterstützung deklarieren

Damit die Hostanwendung weiß, dass Ihre Anwendung das Rendering auf Clusterdisplays unterstützt, müssen Sie ein androidx.car.app.category.FEATURE_CLUSTER-<category>-Element zu <intent-filter> Ihrer CarAppService hinzufügen, wie im folgenden Snippet gezeigt:

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

Ab API-Level 6 bleibt der Lebenszyklus der Auto-App gleich, allerdings verwendet CarAppService::onCreateSession jetzt einen Parameter vom Typ SessionInfo, der zusätzliche Informationen zum erstellten Session-Element enthält (nämlich den Anzeigetyp und die Gruppe der unterstützten Vorlagen).

Anwendungen haben die Möglichkeit, entweder dieselbe Session-Klasse für die Verarbeitung des Clusters und der Hauptanzeige zu verwenden oder anzeigespezifische Sessions zu erstellen, um das Verhalten auf jeder Anzeige anzupassen (wie im folgenden Snippet gezeigt).

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 Garantie dafür, wann oder ob die Clusteranzeige bereitgestellt wird. Es kann auch sein, dass die Cluster-Session die einzige Session ist (z. B. hat der Nutzer die Hauptanzeige zu einer anderen Anwendung gewechselt, während Ihre Anwendung aktiv navigiert). Laut der "Standardvereinbarung" erhält die Anwendung erst die Kontrolle über die Clusteranzeige, nachdem NavigationManager::navigationStarted aufgerufen wurde. Es ist jedoch möglich, dass die Anwendung die Clusteranzeige erhält, während keine aktive Navigation stattfindet, oder nie die Clusteranzeige. Ihre App muss für diese Szenarien den Leerzustand der Kartenkacheln rendern.

Der Host erstellt separate Binder- und CarContext-Instanzen pro Session. Das bedeutet, dass bei Verwendung von Methoden wie ScreenManager::push oder Screen::invalidate nur die Session betroffen sind, über die sie aufgerufen werden. Anwendungen sollten ihre eigenen Kommunikationskanäle zwischen diesen Instanzen erstellen, wenn Session-übergreifende Kommunikation erforderlich ist (z. B. Übertragungen, ein gemeinsames Singleton oder etwas anderes).

Clusterunterstützung testen

Du kannst deine Implementierung sowohl in Android Auto als auch unter Android Automotive OS testen. Bei Android Auto erfolgt dies durch die Konfiguration der Desktop-Haupteinheit so, dass sie eine sekundäre Clusteranzeige emuliert. Bei Android Automotive OS emulieren die generischen System-Images ab API-Level 30 eine Clusteranzeige.

Passen Sie TravelSchätzung mit Text oder einem Symbol an

Wenn Sie die geschätzte Reisezeit mit Text, einem Symbol oder beidem anpassen möchten, verwenden Sie die Methode setTripIcon oder setTripText der Klasse TravelEstimate.Builder. NavigationTemplate verwendet TravelEstimate, um optional Text und Symbole neben oder anstelle der geschätzten Ankunftszeit, der verbleibenden Zeit und der verbleibenden Entfernung festzulegen.

Abbildung 1: Schätzung der Reise mit benutzerdefiniertem Symbol und Text

Das folgende Snippet verwendet setTripIcon und setTripText, um die Schätzung anzupassen:

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

Stellen Sie mithilfe einer häufig aktualisierten Navigationsbenachrichtigung eine detaillierte Routenführung bereit. Damit auf dem Autodisplay eine Navigationsbenachrichtigung angezeigt wird, muss der Builder für Benachrichtigungen Folgendes tun:

  1. Markieren Sie die Benachrichtigung mit der Methode NotificationCompat.Builder.setOngoing als aktiv.
  2. Lege die Kategorie der Benachrichtigung auf Notification.CATEGORY_NAVIGATION fest.
  3. Erweitern Sie die Benachrichtigung mit einem CarAppExtender.

Im Schienen-Widget unten auf dem Autodisplay wird eine Navigationsbenachrichtigung angezeigt. Wenn die Wichtigkeitsstufe der Benachrichtigung auf IMPORTANCE_HIGH festgelegt ist, wird sie auch als Heads-up-Benachrichtigung (HUN) angezeigt. Wenn die Wichtigkeit nicht mit der Methode CarAppExtender.Builder.setImportance festgelegt ist, wird die Wichtigkeit des Benachrichtigungskanals verwendet.

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

Wenn NotificationCompat.Builder.setOnlyAlertOnce mit dem Wert true aufgerufen wird, wird eine Benachrichtigung mit hoher Bedeutung nur einmal in der HUN benachrichtigt.

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 Entfernungsänderungen, wodurch das Schienen-Widget aktualisiert wird 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 festlegen. Wenn die Wichtigkeit auf IMPORTANCE_HIGH gesetzt wird, wird eine HUN angezeigt. Wenn Sie ihn auf einen anderen Wert festlegen, wird nur das Schienen-Widget aktualisiert.

Inhalt der PlaceListNavigationTemplate aktualisieren

Sie können Fahrern erlauben, Inhalte per Tastendruck zu aktualisieren, während sie Listen von Orten durchsuchen, die mit PlaceListNavigationTemplate erstellt wurden. Implementieren Sie zum Aktivieren der Listenaktualisierung die Methode onContentRefreshRequested der OnContentRefreshListener-Schnittstelle 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 dann im Header von PlaceListNavigationTemplate angezeigt, wenn der Listener einen Wert hat.

Wenn der Nutzer auf die Aktualisierungsschaltfläche klickt, wird die Methode onContentRefreshRequested der OnContentRefreshListener-Implementierung aufgerufen. Rufen Sie in onContentRefreshRequested die Methode Screen.invalidate auf. Der Host ruft dann die Methode Screen.onGetTemplate Ihrer App noch einmal auf, um die Vorlage mit dem aktualisierten Inhalt abzurufen. Weitere Informationen zum Aktualisieren von Vorlagen finden Sie unter Inhalte einer Vorlage aktualisieren. Solange die nächste von onGetTemplate zurückgegebene Vorlage vom gleichen Typ ist, wird sie als Aktualisierung gezählt und nicht auf das Vorlagenkontingent angerechnet.

Audio-Anleitung bereitstellen

Damit die Navigationsführung über die Autolautsprecher wiedergegeben werden kann, muss Ihre App den Audiofokus anfordern. Legen Sie im Rahmen von AudioFocusRequest die Nutzung als AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE fest. Legen Sie außerdem den Fokusgewinn auf AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK fest.

Navigation simulieren

Wenn du die Navigationsfunktionen deiner App verifizieren möchtest, wenn du sie an den Google Play Store sendest, muss deine App den NavigationManagerCallback.onAutoDriveEnabled-Callback implementieren. Wenn dieser Callback aufgerufen wird, muss die App die Navigation zum ausgewählten Ziel simulieren, wenn der Nutzer die Navigation beginnt. Die Anwendung kann diesen Modus immer dann beenden, wenn der Lebenszyklus des aktuellen Session den Status Lifecycle.Event.ON_DESTROY erreicht.

Sie können testen, ob die Implementierung von onAutoDriveEnabled aufgerufen wird, indem Sie Folgendes in einer Befehlszeile ausführen:

adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE

Dies wird im folgenden Beispiel veranschaulicht:

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 Standard-Navigations-App für das Auto der zuletzt vom Nutzer gestarteten Navigations-App. Die Standard-App erhält Navigations-Intents, wenn der Nutzer Navigationsbefehle über Assistant aufruft oder wenn eine andere App einen Intent zum Starten der Navigation sendet.

Nutzern die Interaktion mit Ihrer Karte ermöglichen

Sie können Nutzern die Interaktion mit Karten ermöglichen, z. B. durch Zoomen und Schwenken verschiedene Teile einer Karte sehen können. Jede Vorlage hat unterschiedliche Mindestanforderungen für das Car App API-Level. In der folgenden Tabelle finden Sie die Mindestebene für die Vorlage, die Sie implementieren möchten.

VorlageUnterstützte Interaktionsmöglichkeiten seit API-Level der Car App
NavigationTemplate2
PlaceListNavigationTemplate4
RoutePreviewNavigationTemplate4
MapTemplate 5

SurfaceCallback-Methoden

Die SurfaceCallback-Schnittstelle bietet mehrere Callback-Methoden, mit denen Sie Karten, die mit den Vorlagen NavigationTemplate, PlaceListNavigationTemplate, RoutePreviewNavigationTemplate oder MapTemplate erstellt wurden, interaktiv gestalten können: onClick, onScroll, onScale und onFling. In der folgenden Tabelle sehen Sie, wie diese Callbacks mit Nutzerinteraktionen zusammenhängen.

Interaktion SurfaceCallback Methode Unterstützt seit API-Level der Car App
Tap onClick 5
Zum Zoomen auseinander- und zusammenziehen onScale 2
Single-Touch-Drag onScroll 2
Weiterleiten mit nur einer Berührung onFling 2
doppeltippen onScale (mit Skalierungsfaktor, der vom Vorlagenhost bestimmt wird) 2
Automatische Erinnerung im Schwenkmodus onScroll (mit dem vom Vorlagenhost bestimmten Entfernungsfaktor) 2

Kartenaktionsstreifen

Die Vorlagen NavigationTemplate, PlaceListNavigationTemplate, RoutePreviewNavigationTemplate und MapTemplate können eine Kartenaktionsleiste für kartenbezogene Aktionen wie das Vergrößern und Verkleinern, das Zentrieren oder die Anzeige eines Kompasses enthalten. Die Kartenaktionsleiste kann bis zu vier Schaltflächen nur für Symbole enthalten, die ohne Auswirkung auf die Aufgabentiefe aktualisiert werden können. Sie wird im Inaktivitätsstatus ausgeblendet und ist im aktiven Status wieder eingeblendet.

Wenn Sie Callbacks für die Interaktivität von Karten erhalten möchten, müssen Sie der Kartenaktionsleiste eine Action.PAN-Schaltfläche hinzufügen. Wenn der Nutzer auf die Schaltfläche zum Schwenken drückt, wechselt der Host in den Schwenkmodus, wie im folgenden Abschnitt beschrieben.

Wenn in Ihrer App die Schaltfläche Action.PAN in der Kartenaktionsleiste ausgelassen wird, empfängt sie keine Nutzereingabe über die Methoden SurfaceCallback und der Host beendet den zuvor aktivierten Schwenkmodus.

Auf einem Touchscreen wird die Schaltfläche zum Schwenken nicht angezeigt.

Schwenkmodus

Im Schwenkmodus übersetzt der Vorlagenhost Nutzereingaben von Geräten ohne Berührung, z. B. Drehcontrollern und Touchpads, in die entsprechenden SurfaceCallback-Methoden. Auf die Nutzeraktion zum Starten oder Beenden des Schwenkmodus mit der Methode setPanModeListener in NavigationTemplate.Builder reagieren. Der Host kann andere UI-Komponenten in der Vorlage ausblenden, während der Nutzer im Schwenkmodus ist.

Stabiler Bereich

Der stable Bereich wird zwischen „Inaktiv“ und „Aktiv“ aktualisiert. Legen Sie anhand der Größe des stabilen Bereichs fest, ob fahrbezogene Informationen wie Geschwindigkeit, Geschwindigkeitsbegrenzung oder Straßenwarnungen basierend auf der Größe des stabilen Bereichs erfasst werden sollen, damit wichtige Informationen auf der Karte nicht durch die Kartenaktionsstreifen verdeckt werden.

Kontextbezogene Navigationsbenachrichtigungen anzeigen

Alert zeigt dem Fahrer wichtige Informationen mit optionalen Aktionen an, ohne den Kontext des Navigationsbildschirms zu verlassen. Damit der Fahrer bestmöglich bedient werden kann, arbeitet Alert innerhalb der NavigationTemplate. So wird die Navigationsroute nicht blockiert und der Fahrer wird nicht abgelenkt.

Alert ist nur in NavigationTemplate verfügbar. Wenn Sie den Nutzer außerhalb von NavigationTemplate benachrichtigen möchten, sollten Sie eine Vorabbenachrichtigung (HUN) verwenden, wie unter Benachrichtigungen anzeigen beschrieben.

Sie können Alert beispielsweise für Folgendes verwenden:

  • Informiert den Fahrer über ein für die aktuelle Navigation relevantes Update, z. B. eine Änderung der Verkehrslage.
  • Frag den Fahrer, ob es Neuigkeiten zur aktuellen Navigation gibt, z. B. ob es einen Blitzer gibt.
  • Schlagen Sie eine anstehende Aufgabe vor und fragen Sie, ob der Fahrer sie akzeptiert, z. B. ob er bereit ist, jemanden auf dem Weg abzuholen.

In ihrer grundlegenden Form besteht eine Alert aus einem Titel und der Alert-Dauer. Die Dauer wird als Fortschrittsanzeige angegeben. Optional können Sie einen Untertitel, ein Symbol und bis zu zwei Action-Objekte hinzufügen.

Abbildung 2: Kontextbezogene Navigationsbenachrichtigung.

Sobald ein Alert angezeigt wird, wird es nicht in eine andere Vorlage übernommen, wenn die Treiberinteraktion zum Verlassen des NavigationTemplate führt. Sie bleibt im ursprünglichen NavigationTemplate, bis Alert das Zeitlimit überschreitet, der Nutzer eine Aktion ausführt oder die App das Alert-Element schließt.

Benachrichtigung erstellen

Verwenden Sie Alert.Builder, 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 Sie auf das Abbrechen oder Schließen von Alert warten möchten, erstellen Sie eine Implementierung der AlertCallback-Schnittstelle. Die AlertCallback-Aufrufpfade sind:

Dauer von Benachrichtigungen konfigurieren

Wählen Sie für Alert eine Dauer aus, die den Anforderungen Ihrer App entspricht. Die empfohlene Dauer für eine Navigation-Alert beträgt 10 Sekunden. Weitere Informationen finden Sie unter Navigationswarnungen.

Benachrichtigung anzeigen

Um ein Alert anzuzeigen, rufen Sie die Methode AppManager.showAlert auf, die über die CarContext Ihrer App verfügbar ist.

// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
  • Wenn showAlert mit einem Alert aufgerufen wird, das eine alertId hat, die mit der ID des aktuell angezeigten Alert übereinstimmt, geschieht nichts. Alert wird nicht aktualisiert. Wenn Sie ein Alert aktualisieren möchten, müssen Sie es mit einem neuen alertId neu erstellen.
  • Wenn Sie showAlert mit einem Alert aufrufen, der ein anderes alertId als das aktuell angezeigte Alert hat, wird der aktuell angezeigte Alert geschlossen.

Benachrichtigung schließen

Ein Alert wird zwar aufgrund einer Zeitüberschreitung oder einer Nutzerinteraktion automatisch geschlossen, Sie können ein Alert aber auch manuell schließen, z. B. wenn seine Informationen veraltet sind. Wenn Sie ein Alert verwerfen möchten, rufen Sie die Methode dismissAlert mit dem alertId des Alerts auf.

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

Wenn dismissAlert mit einem alertId aufgerufen wird, das nicht mit dem aktuell angezeigten Alert übereinstimmt, geschieht nichts. Es wird keine Ausnahme ausgelöst.