Introduzione
L'SDK Navigation (Nav SDK) offre una funzionalità di navigazione passo passo di prima classe che può essere molto utile per clienti e autisti, in particolare per i nuovi autisti o per quelli che non conoscono la regione. Tuttavia, esistono casi d'uso specifici in cui le aziende non vogliono distrarre i conducenti dalla strada con l'interfaccia utente di navigazione dettagliata, ma vogliono comunque monitorare le posizioni dei veicoli e ascoltare gli eventi relativi al percorso che stanno seguendo. Un esempio sono i camionisti, soprattutto se trasportano materiali pericolosi. Altre società che effettuano consegne utilizzando modalità diverse, ad esempio a piedi per brevi distanze, potrebbero non richiedere l'attivazione delle indicazioni stradali passo passo, il che consentirebbe di risparmiare la durata della batteria del dispositivo.
Ambito
Questo documento descrive come le aziende possono nascondere la mappa di navigazione (visualizzazione) da Nav SDK e usufruire comunque di tutte le funzionalità di Nav SDK in merito a monitoraggio della posizione, iscrizioni agli eventi e callback. I dati acquisiti dall'SDK Nav in modalità headless possono essere utilizzati per migliorare la capacità di monitorare i veicoli e comprendere gli ETA in modo più preciso, il che in definitiva porta a trasparenza ed efficienza.
SDK Navigation
L'SDK Navigation è una libreria nativa per Android / iOS che viene aggiunta all'app per i conducenti. Nel contesto della mobilità, è responsabile di:
- Ottenere posizioni allineate alla strada dall'app che le esegue. Le posizioni allineate alla strada sono più precise del FusedLocationProvider (FLP) di Android, in quanto utilizzano la rete stradale di Google per allineare le posizioni al segmento stradale più vicino, il che rende molto più accurate le stime dell'orario di arrivo e altre informazioni di FLP.
- Esperienza passo passo che consente ai conducenti di spostarsi in modo efficiente dal punto A al punto B tenendo conto del traffico in tempo reale e di altre limitazioni del percorso.
- Attivazione di eventi in base all'avanzamento del percorso, alla posizione, alla velocità e così via tramite listener di eventi e callback registrati.
Esperienza predefinita
Quando i clienti implementano l'SDK di navigazione, si presume che abbiano bisogno della funzionalità di navigazione passo passo. Per questo motivo, la documentazione dell'SDK Navigation (Android e iOS) fornisce istruzioni su come implementare l'SDK Navigation con la navigazione passo passo abilitata.
Su Android, il rendering della mappa passo passo nell'app viene eseguito utilizzando un SupportNavigationFragment o una NavigationView, mentre su iOS viene utilizzato un GMSMapView. Questi elementi dell'interfaccia utente aggiungono alla tua app la mappa interattiva e l'interfaccia utente della navigazione passo passo.
Nella sezione successiva, confrontiamo il codice predefinito dell'SDK Nav con il codice con indicazioni stradali passo passo abilitate con il codice dell'SDK Nav headless sia per Android che per iOS, evidenziando le modifiche necessarie.
Soluzione
Android
Su Android, questo è il codice Java che fa parte dell'app di esempio dell'SDK di navigazione.
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
setContentView(R.layout.activity_nav_fragment);
mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
Come puoi vedere, il punto di vista indica il layout da utilizzare per disegnare l'esperienza di navigazione e, in questo caso, viene creato un SupportNavigationFragment anziché NavigationView.
Per fare in modo che Nav SDK venga avviato in modalità headless, è sufficiente rimuovere queste due istruzioni. Se l'idea è di alternare la modalità headless e non headless (navigazione attiva), è possibile utilizzare una variabile per determinare se la modalità headless deve essere utilizzata o meno, ad esempio:
Boolean mHeadless = true;
che può essere utilizzato in un secondo momento, ad esempio:
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
if(!mHeadless) {
setContentView(R.layout.activity_nav_fragment);
mNavFragment =
(SupportNavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
}
La variabile mHeadless
può essere collegata a un componente UI (ad es. un pulsante di attivazione/disattivazione) che attiverà o disattiverà la modalità headless di conseguenza.
![]() |
![]() |
SDK Nav in esecuzione con la navigazione attiva (headless disattivato) | Stessa app, ma ora con l'SDK di navigazione in esecuzione in modalità headless |
Come puoi vedere nell'esempio a destra sopra, la navigazione di Nav SDK è in esecuzione in background, ma l'esperienza di navigazione passo passo è disattivata.
iOS
Su iOS, la modalità headless può essere eseguita molto facilmente aggiungendo la seguente impostazione durante l'inizializzazione di MapView: \
mapView.isHidden = true
Ad esempio:
/// The main map view.
private lazy var mapView: GMSMapView = {
let mapView = GMSMapView(frame: .zero)
mapView.isHidden = true /// Make it headless!
mapView.isNavigationEnabled = true
mapView.settings.compassButton = true
mapView.delegate = self
return mapView
}()
Ecco come apparirà: la schermata dipende dal modo in cui viene implementata la UI e lo screenshot serve solo a illustrare l'effetto del nascondimento della mappa:
![]() |
![]() |
Navigazione attiva in esecuzione su
App di esempio per iOS |
Stessa app in modalità headless |
Considerazioni sull'implementazione
Poiché la modalità headless non fa altro che nascondere la mappa di navigazione dallo schermo, viene salvato solo il tempo di utilizzo dello schermo, il che consente di risparmiare batteria sul dispositivo. Tuttavia, poiché l'SDK di navigazione continuerà a essere eseguito, gli aggiornamenti della posizione e tutti i callback degli eventi verranno attivati normalmente, pertanto non ci sono effetti collaterali nell'utilizzo di questa configurazione.
Conclusione
Questo documento mostra la flessibilità di Nav SDK e cosa possiamo ottenere in diversi sistemi operativi, date le loro limitazioni. Inoltre, consente ai clienti di personalizzare la propria esperienza di guida per evitare distrazioni e migliorare la sicurezza.
Risorse aggiuntive
Se le notifiche devono essere disattivate durante la navigazione per i motivi sopra indicati, è possibile farlo. Consulta la sezione Modificare le notifiche passo passo in Nav SDK.