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();
Navigationsmetadaten kommunizieren
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.
- Im Gegensatz zu Hauptanzeigen werden auf Cluster-Displays unter Umständen nicht alle
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.
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:
- Markieren Sie die Benachrichtigung mit dem
NotificationCompat.Builder.setOngoing
. - Legen Sie als Kategorie der Benachrichtigung
Notification.CATEGORY_NAVIGATION
fest. - 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.
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:
Wenn das Zeitlimit für
Alert
überschritten wird, ruft der Host dieAlertCallback.onCancel
mit der MethodeAlertCallback.REASON_TIMEOUT
Wert. Anschließend wird die MethodeAlertCallback.onDismiss
.Wenn der Fahrer auf eine der Aktionsschaltflächen klickt, ruft der Host
Action.OnClickListener
und ruft dannAlertCallback.onDismiss
auf.Wenn
Alert
nicht unterstützt wird, ruft der Host aufAlertCallback.onCancel
mit demAlertCallback.REASON_NOT_SUPPORTED
Wert. Der Organisator ruft nichtAlertCallback.onDismiss
, weilAlert
nicht angezeigt wurde.
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 einerAlert
aufgerufen, die einalertId
die mit der ID der derzeit angezeigtenAlert
übereinstimmt, hat keine Auswirkung.Alert
wird nicht aktualisiert. Zum Aktualisieren einerAlert
müssen Sie sie neu erstellen mit einem neuenalertId
.showAlert
wird mit einerAlert
aufgerufen, die eine andere WennalertId
als die derzeit angezeigtenAlert
angezeigt wird, Aktuell wirdAlert
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.