In questa pagina vengono descritte le diverse funzionalità della libreria di app per auto che puoi utilizzare per implementare la funzionalità dell'app di navigazione passo passo.
Dichiara il supporto della navigazione nel file manifest
La tua app di navigazione deve dichiarare la androidx.car.app.category.NAVIGATION
categoria di app auto nel
filtro per intent del suo 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>
Supporta gli intent di navigazione
Per supportare gli intent di navigazione nella tua app, inclusi quelli provenienti
dall'Assistente Google utilizzando una query vocale, l'app deve gestire l'intent
CarContext.ACTION_NAVIGATE
nei suoi
Session.onCreateScreen
e
Session.onNewIntent
.
Per i dettagli sul formato dell'intent, consulta la documentazione relativa a CarContext.startCarApp
.
Accedere ai modelli di navigazione
Le app di navigazione possono accedere ai seguenti modelli progettati appositamente per le app di navigazione. Tutti questi modelli mostrano una superficie sullo sfondo con la mappa e, durante la navigazione attiva, le indicazioni passo passo.
NavigationTemplate
: mostra anche un messaggio informativo facoltativo e stime di viaggio durante la navigazione attiva.MapTemplate
: presenta una versione compatta di un elenco (comeListTemplate
) o di un riquadro (informazioni dettagliate con azioni in evidenza, comePaneTemplate
) accanto a una mappa.PlaceListNavigationTemplate
: mostra anche un elenco di luoghi, per i quali possono essere stati tracciati indicatori corrispondenti sulla mappa.RoutePreviewNavigationTemplate
: mostra anche un elenco di route, una delle quali può essere selezionata ed evidenziata nella mappa.
Per ulteriori informazioni su come progettare l'interfaccia utente dell'app di navigazione utilizzando questi modelli, consulta App di navigazione.
Per ottenere l'accesso ai modelli di navigazione, la tua app deve dichiarare l'autorizzazione androidx.car.app.NAVIGATION_TEMPLATES
nel file AndroidManifest.xml
:
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
Traccia la mappa
Le app di navigazione possono accedere a una Surface
per disegnare la mappa su modelli pertinenti.
A un oggetto SurfaceContainer
è quindi possibile accedere impostando un'istanza SurfaceCallback
sul servizio auto AppManager
:
Kotlin
carContext.getCarService(AppManager::class.java).setSurfaceCallback(surfaceCallback)
Java
carContext.getCarService(AppManager.class).setSurfaceCallback(surfaceCallback);
SurfaceCallback
fornisce un callback quando SurfaceContainer
è disponibile, insieme ad altri callback quando le proprietà di Surface
cambiano.
Per ottenere l'accesso alla piattaforma, la tua app deve dichiarare l'autorizzazione androidx.car.app.ACCESS_SURFACE
nel file AndroidManifest.xml
:
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
L'area visibile della mappa
L'host può disegnare gli elementi dell'interfaccia utente per i modelli nella parte superiore
della mappa. L'host comunica l'area che è garantita essere libera e completamente visibile all'utente chiamando il metodo
SurfaceCallback.onVisibleAreaChanged
. Inoltre, per ridurre al minimo il numero di modifiche, l'host chiama il metodo SurfaceCallback.onStableAreaChanged
con il rettangolo più piccolo, che è sempre visibile in base al modello corrente.
Ad esempio, quando un'app di navigazione utilizza NavigationTemplate
con una barra delle azioni in alto, questa può nascondersi quando l'utente non ha interagito con lo schermo per un po' di tempo per liberare spazio per la mappa. In questo caso, è presente un callback per onStableAreaChanged
e onVisibleAreaChanged
con lo stesso rettangolo. Quando la barra delle azioni è nascosta,
viene richiamata solo onVisibleAreaChanged
con l'area più grande. Se l'utente
interagisce con lo schermo, viene chiamata di nuovo solo onVisibleAreaChanged
con
il primo rettangolo.
Supporta la modalità Buio
Le app di navigazione devono ritracciare la mappa sull'istanza Surface
con i colori scuri appropriati quando l'host stabilisce che le condizioni lo giustificano, come descritto in Qualità delle app Android per le auto.
Per decidere se tracciare una mappa scura, puoi usare il metodo CarContext.isDarkMode
. Ogni volta che lo stato della modalità Buio cambia, ricevi una chiamata al numero
Session.onCarConfigurationChanged
.
Comunicare i metadati di navigazione
Le app di navigazione devono comunicare all'host ulteriori metadati di navigazione. L'host utilizza le informazioni per fornire informazioni all'unità principale del veicolo e per impedire il conflitto tra le applicazioni di navigazione e le risorse condivise.
I metadati di navigazione sono forniti tramite il servizio auto NavigationManager
accessibile da CarContext
:
Kotlin
val navigationManager = carContext.getCarService(NavigationManager::class.java)
Java
NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);
Avviare, terminare e interrompere la navigazione
Affinché l'host possa gestire più app di navigazione, notifiche di routing e dati sui cluster dei veicoli, deve conoscere lo stato attuale della navigazione. Quando un utente avvia la navigazione, chiama
NavigationManager.navigationStarted
.
Analogamente, quando la navigazione termina, ad esempio quando l'utente arriva a destinazione o annulla la navigazione, chiama NavigationManager.navigationEnded
.
Chiama NavigationManager.navigationEnded
solo quando l'utente termina la navigazione. Ad esempio, se devi ricalcolare il percorso a metà di una corsa, utilizza invece Trip.Builder.setLoading(true)
.
A volte l'host ha bisogno di un'app per interrompere la navigazione e chiamare
onStopNavigation
in un oggetto
NavigationManagerCallback
fornito dalla tua app tramite
NavigationManager.setNavigationManagerCallback
.
L'app deve quindi interrompere l'invio di informazioni relative alla prossima svolta nel display del cluster, nelle notifiche di navigazione e nella guida vocale.
Aggiornare le informazioni sulla corsa
Durante la navigazione attiva, chiama
NavigationManager.updateTrip
.
Le informazioni fornite in questa chiamata possono essere utilizzate dal cluster e dai display di avviso del veicolo. A seconda del veicolo usato, non tutte le informazioni vengono mostrate all'utente.
Ad esempio, l'unità principale desktop (DHU) mostra
la Step
aggiunta a
Trip
, ma non le
informazioni di Destination
.
Disegno sulla visualizzazione del cluster
Per offrire un'esperienza utente più immersiva, ti consigliamo di andare oltre la visualizzazione dei metadati di base sul display del cluster del veicolo. A partire dal livello 6 dell'API Car App, le app di navigazione hanno la possibilità di visualizzare i propri contenuti direttamente sul display del cluster (nei veicoli supportati), con le seguenti limitazioni:
- L'API di visualizzazione cluster non supporta i controlli di input
- Il display del cluster deve mostrare solo i riquadri della mappa. Su questi riquadri può essere facoltativamente visualizzata una navigazione attiva del percorso.
- L'API di visualizzazione cluster supporta solo l'utilizzo di
NavigationTemplate
- A differenza dei display principali, i display dei cluster potrebbero non mostrare in modo coerente tutti gli elementi dell'interfaccia utente
NavigationTemplate
, ad esempio istruzioni passo passo, schede ETA e azioni. I riquadri della mappa sono l'unico elemento UI mostrato in modo coerente.
- A differenza dei display principali, i display dei cluster potrebbero non mostrare in modo coerente tutti gli elementi dell'interfaccia utente
Dichiara il supporto per il cluster
Per comunicare all'applicazione host che la tua app supporta il rendering sui display dei cluster, devi aggiungere un elemento androidx.car.app.category.FEATURE_CLUSTER
<category>
a <intent-filter>
di CarAppService
come mostrato nel seguente 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>
Gestione del ciclo di vita e dello stato
A partire dal livello API 6, il
flusso del ciclo di vita
dell'app per auto rimane invariato, ma ora CarAppService::onCreateSession
utilizza un parametro di
tipo SessionInfo
che fornisce
informazioni aggiuntive sulla creazione Session
(ovvero, il tipo di
display e il set di modelli supportati).
Le app possono scegliere di utilizzare la stessa classe Session
per gestire sia il cluster che il display principale oppure creare Sessions
specifiche per la Rete Display per personalizzare il comportamento su ciascun display (come mostrato nello snippet seguente).
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(); } }
Non ci sono garanzie su quando o se verrà fornito il display del cluster ed
è anche possibile che il cluster Session
sia l'unico Session
(ad
esempio, l'utente ha scambiato il display principale con un'altra app mentre la tua app sta
navigando attivamente). Il contratto "standard" prevede che l'app acquisisca il controllo della visualizzazione del cluster solo dopo la chiamata a NavigationManager::navigationStarted
. Tuttavia, è possibile che all'app venga fornita la visualizzazione del cluster quando non è in corso alcuna navigazione attiva o che non venga mai fornita la visualizzazione del cluster. Spetta alla tua app gestire questi scenari eseguendo il rendering dello stato di inattività dell'app dei riquadri della mappa.
L'host crea un binder separato e CarContext
istanze per Session
. Ciò
significa che, quando utilizzi metodi come ScreenManager::push
o
Screen::invalidate
, solo il Session
da cui vengono chiamati è
interessato. Le app devono creare i propri canali di comunicazione tra queste istanze se è necessaria una comunicazione tra Session
(ad esempio, utilizzando le trasmissioni, un single condiviso o altro).
Test dei cluster di supporto
Puoi testare l'implementazione sia sul sistema operativo Android Auto sia sul sistema operativo Android Automotive. Per Android Auto, puoi farlo configurando l'unità principale desktop in modo da emulare il display di un cluster secondario. Per il sistema operativo Android Automotive, le immagini di sistema generiche per il livello API 30 e successivi emulano la visualizzazione di un cluster.
Personalizza TravelStima con testo o un'icona
Per personalizzare la stima del viaggio con testo, un'icona o entrambi, utilizza i metodi
setTripIcon
o
setTripText
della classe TravelEstimate.Builder
. L'NavigationTemplate
utilizza TravelEstimate
per impostare facoltativamente testo e icone accanto o al posto dell'ora di arrivo prevista, del tempo rimanente e della distanza rimanente.
Lo snippet seguente utilizza setTripIcon
e setTripText
per personalizzare la stima del viaggio:
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();
Fornire notifiche passo passo
Fornire istruzioni di navigazione passo passo (TBT) utilizzando una notifica di navigazione aggiornata di frequente. Per essere considerata come una notifica di navigazione sullo schermo dell'auto, il generatore di notifiche deve:
- Contrassegna la notifica come continua con il metodo
NotificationCompat.Builder.setOngoing
. - Imposta la categoria della notifica su
Notification.CATEGORY_NAVIGATION
. - Estendi la notifica con un
CarAppExtender
.
Nel widget Ferroviario in fondo allo schermo dell'auto viene visualizzata una notifica di navigazione. Se il livello di importanza della notifica è impostato su IMPORTANCE_HIGH
, viene visualizzata anche come notifica di avviso (HUN).
Se l'importanza non è impostata con il metodo CarAppExtender.Builder.setImportance
, viene utilizzata l'importanza del canale di notifica.
L'app può impostare un elemento PendingIntent
in CarAppExtender
che viene inviato all'app quando l'utente tocca il widget HUN o il widget barra.
Se
NotificationCompat.Builder.setOnlyAlertOnce
viene chiamato con il valore true
, una notifica di importanza elevata avvisa solo
una volta nel file HUN.
Lo snippet seguente mostra come creare una notifica di navigazione:
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();
Aggiorna regolarmente la notifica TBT per le modifiche della distanza, che aggiorna il widget ferroviario e mostra la notifica solo come HUN.
Puoi controllare il comportamento di HUN impostando l'importanza della notifica con CarAppExtender.Builder.setImportance
. Se imposti l'importanza su IMPORTANCE_HIGH
, viene visualizzato un HUN. Impostandolo su un altro valore, viene aggiornato solo il widget barra laterale.
Aggiorna contenuto PlaceListNavigatorTemplate
Puoi consentire ai conducenti di aggiornare i contenuti semplicemente toccando un pulsante mentre sfogliano elenchi di luoghi creati con PlaceListNavigationTemplate
.
Per attivare l'aggiornamento dell'elenco, implementa il metodo onContentRefreshRequested
dell'interfaccia OnContentRefreshListener
e utilizza PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
per impostare il listener sul modello.
Lo snippet seguente mostra come impostare il listener sul modello:
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();
Il pulsante di aggiornamento viene mostrato nell'intestazione di PlaceListNavigationTemplate
solo se il listener ha un valore.
Quando l'utente fa clic sul pulsante di aggiornamento, viene richiamato il metodo onContentRefreshRequested
della tua implementazione OnContentRefreshListener
. All'interno di onContentRefreshRequested
, chiama il metodo Screen.invalidate
.
L'host richiama quindi il metodo Screen.onGetTemplate
della tua app per recuperare il modello con i contenuti aggiornati. Per ulteriori informazioni sull'aggiornamento dei modelli, consulta la sezione Aggiornare i contenuti di un modello. Se il modello successivo restituito da onGetTemplate
è dello stesso tipo, viene conteggiato un aggiornamento e non viene conteggiato ai fini della quota del modello.
Fornisci indicazioni audio
Per riprodurre le indicazioni di navigazione sugli altoparlanti dell'auto, l'app deve richiedere
l'audio attivo. Come parte di AudioFocusRequest
, imposta l'utilizzo come AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
. Inoltre,
imposta il guadagno dell'attenzione su AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
.
Simula navigazione
Per verificare la funzionalità di navigazione dell'app quando la invii a Google Play Store, l'app deve implementare il callback NavigationManagerCallback.onAutoDriveEnabled
. Quando viene richiamato questo callback, l'app deve simulare la navigazione verso la destinazione scelta quando l'utente inizia la navigazione. L'app può uscire da questa modalità ogni volta che il ciclo di vita dell'attuale Session
raggiunge lo stato Lifecycle.Event.ON_DESTROY
.
Puoi verificare che l'implementazione di onAutoDriveEnabled
venga richiamata eseguendo quanto segue dalla riga di comando:
adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE
Questo è quanto mostrato nell'esempio seguente:
adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE
App di navigazione predefinita per auto
In Android Auto, l'app di navigazione predefinita per auto corrisponde all'ultima app di navigazione avviata dall'utente. L'app predefinita riceve gli intent di navigazione quando l'utente richiama i comandi di navigazione tramite l'assistente o quando un'altra app invia un intent per avviare la navigazione.
Consenti agli utenti di interagire con la mappa
Puoi aggiungere il supporto per consentire agli utenti di interagire con le mappe, ad esempio consentendo loro di vedere parti diverse di una mappa mediante lo zoom e la panoramica. Ogni modello ha un requisito minimo per i livelli API di app per auto diversi. Consulta la seguente tabella per il livello minimo per il modello che vuoi implementare.
Modello | Interattività supportata dal livello API Car App |
---|---|
NavigationTemplate | 2 |
PlaceListNavigationTemplate | 4 |
RoutePreviewNavigationTemplate | 4 |
MapTemplate | 5 |
Metodi di SurfaceCallback
L'interfaccia di SurfaceCallback
offre diversi metodi di callback che ti consentono di aggiungere interattività alle mappe create con i modelli NavigationTemplate
, PlaceListNavigationTemplate
, RoutePreviewNavigationTemplate
o MapTemplate
: onClick
, onScroll
, onScale
e onFling
.
Consulta la tabella seguente per conoscere la relazione tra questi callback e le interazioni degli utenti.
Interazione | SurfaceCallback metodo |
Funzionalità supportata a partire dal livello API Car App |
---|---|---|
Toccare | onClick |
5 |
Pizzica per eseguire lo zoom | onScale |
2 |
Trascinamento con un solo tocco | onScroll |
2 |
Scorrimento single-touch | onFling |
2 |
Tocca due volte | onScale (con fattore di scala determinato dall'host del modello) |
2 |
Movimento rotatorio in modalità panoramica | onScroll (con fattore di distanza determinato dall'host del modello) |
2 |
Striscia di azioni sulla mappa
I modelli
NavigationTemplate
,
PlaceListNavigationTemplate
,
RoutePreviewNavigationTemplate
e MapTemplate
possono avere una barra di azione sulla mappa per azioni correlate alla mappa, come aumentare e diminuire lo zoom, ricentrare, mostrare una bussola e altre azioni che scegli di visualizzare. La barra delle azioni della mappa può avere fino a quattro pulsanti con sole icone che possono essere aggiornati senza influire sulla profondità dell'attività. Viene nascosta durante lo stato di inattività e viene visualizzata di nuovo nello stato attivo.
Per ricevere callback di interattività delle mappe, devi aggiungere un pulsante Action.PAN
nella sequenza di azioni della mappa. Quando l'utente preme il pulsante Panoramica, l'host entra in modalità Panoramica, come descritto nella sezione seguente.
Se l'app omette il pulsante Action.PAN
nella barra delle azioni della mappa, non riceve input utente dai metodi SurfaceCallback
e l'host esce da qualsiasi modalità panoramica attivata in precedenza.
Su un touchscreen, il pulsante per la panoramica non viene visualizzato.
Modalità panoramica
In modalità panoramica, l'host del modello converte l'input utente da dispositivi di input non touch, come controller rotativi e touchpad, nei metodi SurfaceCallback
appropriati. Rispondi all'azione dell'utente per attivare o uscire dalla modalità panoramica con il metodo setPanModeListener
in NavigationTemplate.Builder
. L'host può nascondere altri componenti dell'interfaccia utente nel modello mentre l'utente è in modalità panoramica.
Area stabile
L'area stabile viene aggiornata in base allo stato inattivo e allo stato attivo. Stabilisci se tracciare informazioni di guida, come velocità, limiti di velocità o avvisi stradali, in base alle dimensioni dell'area stabile, in modo che le informazioni importanti sulla mappa non siano ostruite dalla barra di azione della mappa.
Visualizza avvisi di navigazione contestualizzati
Alert
mostra informazioni importanti al conducente con azioni facoltative e senza uscire dal contesto della schermata di navigazione. Per offrire la migliore esperienza al conducente, Alert
opera all'interno di NavigationTemplate
per evitare di bloccare il percorso di navigazione e ridurre al minimo le distrazioni alla guida.
Alert
è disponibile solo all'interno di NavigationTemplate
.
Per inviare una notifica all'utente al di fuori di NavigationTemplate
, valuta la possibilità di utilizzare una notifica in evidenza (HUN), come spiegato nella sezione Mostra notifiche.
Ad esempio, usa Alert
per:
- Informare il conducente di un aggiornamento pertinente alla navigazione corrente, ad esempio una modifica delle condizioni del traffico.
- Chiedi al conducente di fornirti un aggiornamento relativo alla navigazione corrente, ad esempio l'esistenza di un autovelox.
- Proponi un'attività imminente e chiedi se l'autista la accetta, ad esempio se è disposto a far salire qualcuno mentre si trova.
Nella sua forma di base, un Alert
è costituito da un titolo e dalla durata di Alert
. La durata è rappresentata da una barra di avanzamento. Se vuoi, puoi aggiungere un sottotitolo, un'icona e fino a due oggetti Action
.
Una volta visualizzato, un Alert
non viene trasferito a un altro modello se l'interazione con il conducente comporta l'uscita da NavigationTemplate
.
Rimane nel NavigationTemplate
originale fino al timeout di Alert
, all'esecuzione di un'azione da parte dell'utente o all'eliminazione dell'Alert
nell'app.
Crea un avviso
Utilizza Alert.Builder
per creare un'istanza Alert
:
Kotlin
Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build()
Java
new Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build();
Se vuoi rimanere in ascolto per l'annullamento o l'ignoramento di Alert
, crea un'implementazione dell'interfaccia di AlertCallback
.
I percorsi di chiamata AlertCallback
sono:
Se si verifica il timeout di
Alert
, l'host chiama il metodoAlertCallback.onCancel
con il valoreAlertCallback.REASON_TIMEOUT
. Quindi chiama il metodoAlertCallback.onDismiss
.Se il conducente fa clic su uno dei pulsanti di azione, l'organizzatore chiama
Action.OnClickListener
e poi chiamaAlertCallback.onDismiss
.Se
Alert
non è supportato, l'organizzatore chiamaAlertCallback.onCancel
con il valoreAlertCallback.REASON_NOT_SUPPORTED
. L'organizzatore non chiamaAlertCallback.onDismiss
, perchéAlert
non è stato mostrato.
Configura la durata degli avvisi
Scegli una durata di Alert
che
soddisfa le esigenze della tua app. La durata consigliata per una navigazione
Alert
è di 10 secondi. Consulta Avvisi di navigazione
per ulteriori informazioni.
Mostra un avviso
Per mostrare una Alert
, chiama il metodo
AppManager.showAlert
disponibile tramite l'app
CarContext
.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
- Se chiami
showAlert
con unAlert
che haalertId
uguale all'ID dell'Alert
attualmente visualizzato, non succede nulla. IlAlert
non si aggiorna. Per aggiornare unAlert
, devi ricrearlo con un nuovoalertId
. - Se chiami
showAlert
con unAlert
che ha unaalertId
diversa da quella delAlert
attualmente visualizzato, verrà ignorato ilAlert
attualmente visualizzato.
Ignorare un avviso
Mentre una Alert
si chiude automaticamente
a causa del timeout o di un'interazione con il conducente, puoi anche chiudere manualmente una
Alert
, ad esempio se le sue informazioni diventano obsolete. Per ignorare un elemento
Alert
, chiama il
metodo
dismissAlert
con la
alertId
di Alert
.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
Una chiamata a dismissAlert
con un alertId
che non corrisponde al Alert
attualmente
visualizzato non produce alcun risultato. e non genera eccezioni.