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
L'app di navigazione deve dichiarare la androidx.car.app.category.NAVIGATION
categoria di app auto nel filtro per intent della sua 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>
Intenti di navigazione dell'assistenza
Per supportare gli intent di navigazione verso la tua app, inclusi quelli provenienti
dall'Assistente Google tramite 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
.
Accedi ai modelli di navigazione
Le app di navigazione possono accedere ai seguenti modelli specificamente progettati 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 le stime di viaggio durante la navigazione attiva.MapTemplate
: presenta una versione compatta di un elenco (ad esempioListTemplate
) o di un riquadro (informazioni dettagliate con azioni in evidenza, come inPaneTemplate
) accanto a una mappa.PlaceListNavigationTemplate
: mostra anche un elenco di luoghi, i cui indicatori corrispondenti possono essere disegnati nella mappa.RoutePreviewNavigationTemplate
: mostra anche un elenco di route, una delle quali può essere selezionata ed evidenziata nella mappa.
Per ulteriori dettagli 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"/>
Disegnare la mappa
Le app di navigazione possono accedere a una Surface
per disegnare la mappa sui modelli pertinenti.
È quindi possibile accedere a un oggetto SurfaceContainer
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 elementi dell'interfaccia utente per i modelli nella parte superiore della mappa. L'host comunica l'area che è garantita non essere ostruita 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 nella parte superiore, questa può nascondersi quando l'utente non interagisce con lo schermo per un po' di tempo, per liberare spazio per la mappa. In
questo caso, c'è un callback a onStableAreaChanged
e
onVisibleAreaChanged
con lo stesso rettangolo. Quando la barra delle azioni è nascosta,
viene chiamata solo onVisibleAreaChanged
con l'area più grande. Se l'utente
interagisce con lo schermo, viene richiamata solo onVisibleAreaChanged
con
il primo rettangolo.
Supporta la modalità Buio
Le app di navigazione devono tracciare nuovamente la mappa nell'istanza Surface
con i colori scuri corretti quando l'host determina 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 ulteriori metadati di navigazione con l'host. L'host utilizza le informazioni per fornire informazioni all'unità principale del veicolo e per evitare che le applicazioni di navigazione si scontrino sulle 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 relative ai percorsi e dati sul cluster di veicoli, deve conoscere lo stato attuale della navigazione. Quando un utente avvia la navigazione, chiama
NavigationManager.navigationStarted
.
Analogamente, quando termina la navigazione, 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 nel bel mezzo di una corsa, utilizza Trip.Builder.setLoading(true)
.
A volte, l'host ha bisogno di un'app per interrompere la navigazione e le chiamate
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.
Aggiorna le informazioni di viaggio
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 l'elemento Step
aggiunto a Trip
, ma non le informazioni Destination
.
Utilizzo della 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 eseguire il rendering dei propri contenuti direttamente sul display del cluster (nei veicoli supportati), con le seguenti limitazioni:
- L'API di visualizzazione del cluster non supporta i controlli di input
- Il display del cluster deve mostrare solo riquadri della mappa. Facoltativamente, su questi riquadri può essere visualizzata una navigazione del percorso attiva.
- L'API di visualizzazione del cluster supporta solo l'utilizzo della classe
NavigationTemplate
- A differenza dei display principali, i display dei cluster potrebbero non mostrare in modo coerente tutti gli elementi dell'interfaccia utente di
NavigationTemplate
, ad esempio istruzioni passo passo, schede ETA e azioni. I riquadri della mappa sono l'unico elemento UI visualizzato in modo coerente.
- A differenza dei display principali, i display dei cluster potrebbero non mostrare in modo coerente tutti gli elementi dell'interfaccia utente di
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
richiede un parametro di tipo SessionInfo
che fornisce informazioni aggiuntive sul Session
creato (ovvero il tipo di visualizzazione e il set di modelli supportati).
Le app possono 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 ogni 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 riguardo a quando o se viene fornito il display del cluster. Inoltre, è possibile che il cluster Session
sia l'unico Session
(ad esempio, l'utente ha scambiato il display principale con un'altra app durante la navigazione attiva della tua app). 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 non è mai possibile ricevere la visualizzazione
del cluster. Spetta all'app gestire questi scenari eseguendo il rendering dello stato di inattività dei riquadri della mappa.
L'host crea un raccoglitore separato e CarContext
istanze per Session
. Ciò significa che, quando vengono utilizzati metodi come ScreenManager::push
o Screen::invalidate
, viene interessato solo il Session
da cui vengono chiamati. Le app dovrebbero creare i propri canali di comunicazione tra queste istanze se è necessaria una comunicazione tra Session
(ad esempio, utilizzando trasmissioni, un single condiviso o altro).
Supporto del cluster di test
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 un testo o un'icona
Per personalizzare la stima di viaggio con testo, un'icona o entrambi, utilizza i metodi
setTripIcon
o
setTripText
del corso.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.
Il seguente snippet utilizza setTripIcon
e setTripText
per personalizzare la stima di 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
Fornisci istruzioni di navigazione passo passo (TBT) utilizzando una notifica di navigazione aggiornata di frequente. Affinché venga trattata come una notifica di navigazione nello schermo dell'auto, il generatore di notifiche deve:
- Contrassegna la notifica come in corso con il metodo
NotificationCompat.Builder.setOngoing
. - Imposta la categoria della notifica su
Notification.CATEGORY_NAVIGATION
. - Estendi la notifica con un
CarAppExtender
.
Nel widget dei binari 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
nella sezione CarAppExtender
che viene inviato all'app quando l'utente tocca il widget HUN o il widget rail.
Se
NotificationCompat.Builder.setOnlyAlertOnce
viene chiamato con il valore true
, una notifica di importanza elevata avvisa solo
una volta nell'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 variazioni di distanza,
il widget dei binari viene aggiornato e la notifica viene visualizzata 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. Se lo imposti su un altro valore, viene aggiornato solo il widget rail.
Aggiorna i contenuti di 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 visualizzato 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
.
A questo punto, l'host richiama il metodo Screen.onGetTemplate
della tua app per recuperare il modello con i contenuti aggiornati. Per ulteriori informazioni sull'aggiornamento dei modelli, consulta Aggiornare i contenuti di un modello. Finché il successivo modello restituito da onGetTemplate
è dello stesso tipo, viene conteggiato un aggiornamento e non viene conteggiato ai fini della quota di modelli.
Fornisci indicazioni audio
Per riprodurre le indicazioni di navigazione sugli altoparlanti dell'auto, l'app deve richiedere l'impostazione di messa a fuoco audio. Come parte di AudioFocusRequest
, imposta l'utilizzo come AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
. Inoltre,
imposta il guadagno della messa a fuoco su AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
.
Simula navigazione
Per verificare la funzionalità di navigazione dell'app quando la invii al Google Play Store, l'app deve implementare il callback NavigationManagerCallback.onAutoDriveEnabled
. Quando viene chiamato 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 le seguenti operazioni dalla riga di comando:
adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE
come illustrato 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 predefinita per l'auto di navigazione 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 tua mappa
Puoi aggiungere il supporto per l'interazione degli utenti con le mappe, ad esempio consentendo loro di vedere parti diverse di una mappa con lo zoom e la panoramica. Ogni modello ha un requisito minimo diverso per il livello API dell'API Car App. Consulta la seguente tabella per il livello minimo del modello da implementare.
Modello | Interattività supportata a partire dal livello API Car App |
---|---|
NavigationTemplate | 2 |
PlaceListNavigationTemplate | 4 |
RoutePreviewNavigationTemplate | 4 |
MapTemplate |
5 |
Metodi di callback di superficie
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 di seguito per conoscere la relazione tra questi callback e le interazioni degli utenti.
Interazione | SurfaceCallback metodo |
Funzionalità supportata a partire dal livello API Car App |
---|---|---|
Tocca | onClick |
5 |
Pizzica per eseguire lo zoom | onScale |
2 |
Trascinamento single-touch | onScroll |
2 |
Scorrimento single-touch | onFling |
2 |
Tocca due volte | onScale (con il fattore di scala determinato dall'host del modello) |
2 |
Sollecito rotatorio in modalità Panoramica | onScroll (con il fattore di distanza determinato dall'host modello) |
2 |
Striscia di azioni sulla mappa
I modelli
NavigationTemplate
,
PlaceListNavigationTemplate
,
RoutePreviewNavigationTemplate
e MapTemplate
possono avere una striscia di azioni sulla mappa per azioni correlate alla mappa, come aumentare
e diminuire lo zoom, ricentrarlo, mostrare una bussola e altre azioni
da visualizzare. La barra delle azioni della mappa può avere fino a quattro pulsanti solo con icone che possono
essere aggiornati senza influire sulla profondità dell'attività. Viene nascosta durante lo stato di inattività e riappare nello stato attivo.
Per ricevere callback interattività della mappa, devi aggiungere un pulsante Action.PAN
nella barra delle 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 l'input utente dai metodi SurfaceCallback
e l'host esce da qualsiasi modalità panoramica attivata in precedenza.
Sui 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 tra stato inattivo e attivo. Stabilisci se tracciare informazioni di guida, ad esempio 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 al conducente informazioni importanti con azioni facoltative, senza uscire dal contesto della schermata di navigazione. Per offrire al conducente un'esperienza ottimale, 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 in
Mostra notifiche.
Ad esempio, usa Alert
per:
- Informa il conducente di un aggiornamento pertinente alla navigazione corrente, come una modifica delle condizioni del traffico.
- Chiedi al conducente un aggiornamento relativo alla navigazione corrente, ad esempio l'esistenza di un autovelox.
- Proponi un'attività imminente e chiedi se il conducente 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 elemento Alert
non viene trasferito a un altro modello se
l'interazione del conducente determina l'uscita da NavigationTemplate
.
Rimane nel NavigationTemplate
originale fino al timeout di Alert
, all'utente
intraprende un'azione o all'app ignora il Alert
.
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 di Alert
annullamento o chiusura, crea un'implementazione dell'interfaccia
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 durata avviso
Scegli una durata della Alert
che soddisfa le esigenze della tua app. La durata consigliata per una navigazione Alert
è 10 secondi. Per saperne di più, consulta la sezione Avvisi di navigazione.
Mostra un avviso
Per mostrare un Alert
, chiama il metodo
AppManager.showAlert
disponibile tramite il
CarContext
della tua app.
// 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.Alert
non si aggiorna. Per aggiornare un elementoAlert
, devi ricrearlo con un nuovoalertId
. - Se chiami
showAlert
con unAlert
che ha unaalertId
diversa da quella diAlert
attualmente visualizzata, ilAlert
attualmente visualizzato verrà ignorato.
Ignorare un avviso
Mentre una Alert
si chiude automaticamente a causa del timeout o dell'interazione con il conducente, puoi anche chiudere manualmente una Alert
, ad esempio se le sue informazioni diventano obsolete. Per ignorare un
Alert
, chiama il
metodo
dismissAlert
con il
alertId
di Alert
.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
Se chiami dismissAlert
con un alertId
che non corrisponde al Alert
attualmente
visualizzato, non succede nulla. Non genera alcuna eccezione.