Einführung
Das Navigation SDK (Nav SDK) bietet eine erstklassige detaillierte Routenführung, 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 nicht möchten, dass die Fahrer durch die UI der detaillierten Routenführung abgelenkt werden, aber trotzdem Fahrzeugstandorte verfolgen und Ereignisse im Zusammenhang mit der gefahrenen Route erfassen möchten. Ein Beispiel sind Lkw-Fahrer, insbesondere wenn sie Gefahrstoffe transportieren. Andere Unternehmen, die Lieferungen mit verschiedenen Verkehrsmitteln durchführen, z. B. zu Fuß für kurze Strecken, benötigen möglicherweise auch keine aktivierte detaillierte Routenführung. 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 Standortverfolgung, Ereignisabos und Callbacks nutzen können. Daten, die im monitorlosen Modus aus dem Nav SDK erfasst werden, können verwendet werden, um die Verfolgung von Fahrzeugen zu verbessern und die voraussichtliche Ankunftszeit genauer zu berechnen. Das führt letztendlich zu mehr Transparenz und Effizienz.
Navigation SDK
Das Navigation SDK ist eine native Android-/iOS-Bibliothek, die der Fahrer-App hinzugefügt wird. Im Mobilitätskontext ist sie für Folgendes zuständig:
- Abrufen von standortbezogenen Daten von der App, in der sie ausgeführt wird. Standortbezogene Daten sind genauer als die des FusedLocationProvider (FLP) von Android, da sie das Straßennetz von Google verwenden, um Standorte dem nächsten Straßenabschnitt zuzuordnen. Dadurch sind die voraussichtliche Ankunftszeit und andere Informationen von FLP viel genauer.
- Detaillierte Routenführung, mit der Fahrer effizient von A nach B gelangen können, wobei der Echtzeit-Traffic und andere Routenbeschränkungen berücksichtigt werden.
- Auslösen von Ereignissen basierend auf Routenfortschritt, Standort, Geschwindigkeit usw. über Ereignis-Listener und registrierte Callbacks.
Standardverhalten
Wenn Kunden das Nav SDK implementieren, wird davon ausgegangen, dass sie die detaillierte Routenführung benötigen. Daher enthält die Dokumentation des Nav SDK (Android und iOS) eine Anleitung zur Implementierung des Nav SDK mit aktivierter detaillierter Routenführung.
Unter Android wird die detaillierte Routenführung in der App mit einem SupportNavigationFragment oder einer NavigationView gerendert, unter iOS mit einer GMSMapView. Diese UI-Elemente fügen der App die interaktive Karte und die UI der detaillierten Routenführung hinzu.
Im nächsten Abschnitt vergleichen wir den Standardcode des Nav SDK mit aktivierter detaillierter Routenführung mit dem Code des monitorlosen Nav SDK für Android und iOS und heben die erforderlichen Änderungen hervor.
Lösung
Android
Unter Android ist dies der Java-Code, der Teil der Beispiel-App des Nav SDK 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 Zeichnen der Navigation verwendet werden soll. In diesem Fall wird ein SupportNavigationFragment anstelle der NavigationView erstellt.
Damit das Nav SDK im monitorlosen Modus gestartet wird, müssen wir diese beiden Anweisungen einfach entfernen. Wenn zwischen dem monitorlosen und dem nicht monitorlosen Modus (aktive Navigation) gewechselt werden soll, kann eine Variable verwendet werden, um zu bestimmen, ob der monitorlose Modus verwendet werden muss oder nicht. 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. einer Schaltfläche) verknüpft werden, die den monitorlosen Modus entsprechend aktiviert oder deaktiviert.
|
|
| Nav SDK mit aktiver Navigation (monitorloser Modus deaktiviert) | Dieselbe App, aber jetzt mit dem Nav SDK im monitorlosen Modus |
Wie Sie im rechten Beispiel oben sehen, wird die Navigation des Nav SDK im Hintergrund ausgeführt, die detaillierte Routenführung ist jedoch deaktiviert.
iOS
Unter iOS kann der monitorlose 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 UI ab. Der Screenshot dient nur zur Veranschaulichung der Auswirkungen des Ausblendens von MapView:
|
|
| Aktive Navigation
iOS-Beispiel-App |
Dieselbe App im monitorlosen Modus |
Hinweise zur Implementierung
Da der monitorlose Modus nichts weiter als das Ausblenden der Navigationskarte auf dem Bildschirm ist, wird nur die Bildschirmzeit gespart, was zu einer längeren Akkulaufzeit des Geräts führt. Da das Nav SDK jedoch weiterhin ausgeführt wird, werden Standortaktualisierungen und alle Ereignis-Callbacks normal ausgelöst. Daher gibt es keine Nebenwirkungen bei der Verwendung dieser Konfiguration.
Fazit
Dieses Dokument zeigt, wie flexibel das Nav SDK ist und was in verschiedenen Betriebssystemen angesichts ihrer Einschränkungen erreicht werden kann. Außerdem können Kunden die Fahrerfahrung anpassen, um Ablenkungen zu vermeiden und die Sicherheit zu verbessern.
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 Detaillierte Routenführung im Nav SDK ändern.