SDK Nav - Modalità headless

Introduzione

L'SDK Navigation (SDK Nav) 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 all'itinerario 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.

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 agganciate alla strada sono più precise rispetto a FusedLocationProvider (FLP) di Android, in quanto utilizzano la rete stradale di Google per agganciare le posizioni al segmento stradale più vicino, il che rende gli ETA e altre informazioni di FLP molto più accurati.
  • 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 Nav SDK, si presume che abbiano bisogno della funzionalità 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 di navigazione passo-passo.

Nella sezione successiva, confrontiamo il codice predefinito dell'SDK Nav con il codice abilitato per la navigazione passo passo con il codice dell'SDK Nav headless per Android e iOS, evidenziando le modifiche necessarie.

Soluzione

Android

Su Android, questo è il codice Java incluso nell'app di esempio dell'SDK Nav.

@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, la vista punta al layout che dovrebbe essere utilizzato 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 è quella di alternare tra headless e non headless (navigazione attiva), è possibile utilizzare una variabile per determinare se headless deve essere utilizzato o meno, ad esempio:

Boolean mHeadless = true;

Quindi può essere utilizzato in seguito, in questo modo:

@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 dell'interfaccia utente (ad esempio un interruttore) che abiliterà o disabiliterà di conseguenza la modalità headless.

alt_text alt_text
SDK Nav in esecuzione con la navigazione attiva (headless disattivato) Stessa app ma ora con Nav SDK 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 realizzata 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 dipenderà dal modo in cui viene implementata la UI e lo screenshot serve solo a illustrare l'effetto del nascondimento di mapView:

alt_text alt_text
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é Nav SDK continuerà a funzionare, gli aggiornamenti della posizione e tutti i callback degli eventi verranno attivati normalmente, pertanto non vi saranno effetti collaterali nell'utilizzo di questa configurazione.

Conclusione

Questo documento mostra quanto sia flessibile Nav SDK e cosa possiamo ottenere in diversi sistemi operativi, date le loro limitazioni. Permette inoltre ai clienti di personalizzare la propria esperienza di guida per evitare distrazioni e migliorare la sicurezza.

Risorse aggiuntive

Se per i motivi sopra menzionati è necessario disattivare le notifiche durante la navigazione, è possibile farlo consultando Modificare le notifiche passo passo in Nav SDK.