Nav SDK – Monitorloser Modus

Einführung

Das Navigation SDK (Nav SDK) bietet eine erstklassige Turn-by-Turn-Funktion, die für Kunden und Fahrer sehr hilfreich sein kann, insbesondere für neue Fahrer oder Fahrer, die sich in der Region nicht auskennen. Es gibt jedoch bestimmte Anwendungsfälle, in denen Unternehmen die Aufmerksamkeit der Fahrer nicht durch die Benutzeroberfläche für die Turn-by-Turn-Navigation ablenken möchten, aber trotzdem Fahrzeugstandorte erfassen und auf Ereignisse im Zusammenhang mit der gefahrenen Route reagieren möchten. Ein Beispiel sind Lkw-Fahrer, insbesondere wenn sie Gefahrgut transportieren. Bei anderen Unternehmen, die Lieferungen mit anderen Verkehrsmitteln durchführen, z. B. zu Fuß für kurze Strecken, ist die Turn-by-Turn-Navigation möglicherweise nicht erforderlich. Dadurch wird die Akkulaufzeit des Geräts verlängert.

Ebene

In diesem Dokument wird beschrieben, wie Unternehmen die Navigationskarte (Ansicht) im Nav SDK ausblenden und trotzdem alle Funktionen des Nav SDK in Bezug auf Standortbestimmung, Ereignisabos und Rückrufe nutzen können. Daten, die im Headless-Modus über das Nav SDK erfasst werden, können verwendet werden, um die Möglichkeit zu verbessern, Fahrzeuge zu verfolgen und Ankunftszeiten genauer zu ermitteln. Das führt letztendlich zu mehr Transparenz und Effizienz.

Das Navigation SDK ist eine native Android-/iOS-Bibliothek, die der Fahrer-App hinzugefügt wird. Im Mobilitätskontext ist es für Folgendes verantwortlich:

  • Standorte, die an Straßen ausgerichtet sind, von der App abrufen, die die Funktion ausführt. Die Standortbestimmung per Straßenfoto ist präziser als die von Android.FusedLocationProvider (FLP), da es das Straßennetz von Google nutzt, um Standorte dem nächstgelegenen Straßenabschnitt zuzuordnen, wodurch die voraussichtlichen Ankunftszeiten und andere Informationen von FLP wesentlich genauer werden.
  • Eine detaillierte Wegbeschreibung, die es Fahrern ermöglicht, unter Berücksichtigung von Echtzeit-Verkehrsinformationen und anderen Routenbeschränkungen effizient von A nach B zu gelangen.
  • Auslösen von Ereignissen basierend auf Routenfortschritt, Standort, Geschwindigkeit usw. durch Ereignis-Listener und registrierte Rückruffunktionen.

Standardverhalten

Bei der Implementierung des Nav SDK wird davon ausgegangen, dass Kunden die Turn-by-Turn-Funktion benötigen. Deshalb enthält die Dokumentation des Nav SDK (Android und iOS) Anweisungen zur Implementierung des Nav SDK mit aktivierter Turn-by-Turn-Funktion.

Bei Android wird die Darstellung der Abbiegehinweise in der App durch die Verwendung eines SupportNavigationFragment oder NavigationView erreicht, während es sich bei iOS um ein GMSMapView handelt. Diese UI-Elemente fügen Ihrer App die interaktive Karte und die Turn-by-Turn-Navigation hinzu.

Im nächsten Abschnitt vergleichen wir den Standardcode des Nav SDK mit aktiviertem Turn-by-Turn-Modus mit dem Code des Headless Nav SDK für Android und iOS und heben die erforderlichen Änderungen hervor.

Lösung

Android

Unter Android ist das der Java-Code, der Teil der Nav SDK-Beispiel-App ist.

@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);

Wie Sie sehen, verweist die Ansicht auf das Layout, das zum Rendern der Navigation verwendet werden soll. In diesem Fall wird ein SupportNavigationFragment anstelle der NavigationView erstellt.

Damit das Nav SDK im Headless-Modus gestartet wird, müssen wir diese beiden Anweisungen einfach entfernen. Wenn Sie zwischen dem monitorlosen und dem nicht monitorlosen Modus (aktive Navigation) wechseln möchten, können Sie eine Variable verwenden, um festzulegen, ob der monitorlose Modus verwendet werden soll. Beispiel:

Boolean mHeadless = true;

Sie kann dann so verwendet werden:

@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);
   }

Die Variable mHeadless kann mit einer UI-Komponente (z. B. einem Schalter) verknüpft werden, mit der der Headless-Modus aktiviert oder deaktiviert wird.

alt_text alt_text
Nav SDK mit aktiver Navigation (Headless-Modus deaktiviert) Dieselbe App, aber jetzt mit dem Nav SDK im Headless-Modus

Wie Sie im Beispiel rechts sehen, wird die Navigation des Nav SDK im Hintergrund ausgeführt, die detaillierte Wegbeschreibung ist jedoch deaktiviert.

iOS

Unter iOS kann der Headless-Modus ganz einfach aktiviert werden, indem Sie bei der Initialisierung von MapView die folgende Einstellung hinzufügen: \

mapView.isHidden = true


Beispiel:

  /// 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
  }()

So sieht es aus – der Bildschirm hängt von der Implementierung der Benutzeroberfläche ab. Der Screenshot dient nur zur Veranschaulichung der Auswirkungen des Ausblendens der mapView:

alt_text alt_text
Aktive Navigation auf

iOS-Beispiel-App

Dieselbe App im monitorlosen Modus

Hinweise zur Implementierung

Da im Headless-Modus lediglich die Navigationskarte auf dem Display ausgeblendet wird, wird nur die Display-Aktivität reduziert, was zu einer längeren Akkulaufzeit des Geräts führt. Da das Nav SDK jedoch weiterhin ausgeführt wird, werden Standortupdates und alle Event-Callbacks normal ausgelöst. Die Verwendung dieser Konfiguration hat also keine Nebenwirkungen.

Fazit

In diesem Dokument wird beschrieben, wie flexibel das Nav SDK ist und was wir in verschiedenen Betriebssystemen angesichts ihrer Einschränkungen erreichen können. Außerdem können Kunden die Fahreransicht anpassen, um Ablenkungen zu vermeiden und die Sicherheit zu erhöhen.

Zusätzliche Ressourcen

Wenn Benachrichtigungen während der Navigation aus den oben genannten Gründen deaktiviert werden müssen, ist das auch möglich. Weitere Informationen finden Sie unter Turn-by-Turn-Benachrichtigungen im Nav SDK ändern.