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 inPaneTemplate
) 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
.
Navigationsmetadaten kommunizieren
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.
- Im Gegensatz zu Hauptdisplays werden auf Cluster-Displays möglicherweise nicht alle
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.
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:
- Markieren Sie die Benachrichtigung mit der Methode
NotificationCompat.Builder.setOngoing
als aktiv. - Lege die Kategorie der Benachrichtigung auf
Notification.CATEGORY_NAVIGATION
fest. - 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.
Vorlage | Unterstützte Interaktionsmöglichkeiten seit API-Level der Car App |
---|---|
NavigationTemplate | 2 |
PlaceListNavigationTemplate | 4 |
RoutePreviewNavigationTemplate | 4 |
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.
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:
Wenn bei
Alert
eine Zeitüberschreitung auftritt, ruft der Host die MethodeAlertCallback.onCancel
mit dem WertAlertCallback.REASON_TIMEOUT
auf. Anschließend wird die MethodeAlertCallback.onDismiss
aufgerufen.Wenn der Treiber auf eine der Aktionsschaltflächen klickt, ruft der Host
Action.OnClickListener
und dannAlertCallback.onDismiss
auf.Wenn
Alert
nicht unterstützt wird, ruft der HostAlertCallback.onCancel
mit dem WertAlertCallback.REASON_NOT_SUPPORTED
auf. Der Host ruftAlertCallback.onDismiss
nicht auf, daAlert
nicht angezeigt wurde.
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 einemAlert
aufgerufen wird, das einealertId
hat, die mit der ID des aktuell angezeigtenAlert
übereinstimmt, geschieht nichts.Alert
wird nicht aktualisiert. Wenn Sie einAlert
aktualisieren möchten, müssen Sie es mit einem neuenalertId
neu erstellen. - Wenn Sie
showAlert
mit einemAlert
aufrufen, der ein anderesalertId
als das aktuell angezeigteAlert
hat, wird der aktuell angezeigteAlert
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 Alert
s 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.