Migrationsanleitung

Die größte Änderung, die Google am Navigation SDK für Version 2 vorgenommen hat, besteht darin, dass wir mehrere Navigation SDK-Klassen durch ihre Gegenstücke aus dem Maps SDK for Android ersetzt haben.

Ab Version 2.2 ist das Navigation SDK ein praktischer Ersatz für die Google Play Services Maps API. Anstatt alle APIs in com.google.android.Libraries neu zu packen, wurden sie wie die Google Play-Dienste in com.google.android.gms.maps verpackt. Dies erleichtert den Wechsel zwischen einer Version der Google Play-Dienste und dem Navigation SDK.

Vorteile

  • Bessere Arbeitsspeichernutzung. Sie verwenden jetzt weniger Arbeitsspeicher und Bandbreite als wenn Sie sowohl das Navigation SDK als auch das Maps SDK for Android verwenden würden.
  • Der Wechsel vom Kartenansichtsmodus zum Navigationsmodus ist jetzt reibungsloser und einfacher.
  • Du hast jetzt mehr Kontrolle über die Kamera.
  • Sie können jetzt z. B. Polylinien und Overlays zeichnen und der Karte benutzerdefinierte Stile hinzufügen.

Funktionen wie Street View und der Lite-Modus werden jedoch nicht unterstützt.

Voraussetzungen

  • Version 2 des Navigation SDK verwendet Android Jetpack, eine Suite von Bibliotheken, Tools und Anleitungen, die das Schreiben qualitativ hochwertiger Apps erleichtert. Dies bedeutet, dass Sie Ihre App von Supportbibliotheken zur Verwendung von AndroidX migrieren müssen. Weitere Informationen finden Sie unter Zu AndroidX migrieren.

Schritt 1: Vom Maps SDK for Android migrieren

Die meisten Funktionen des Maps SDK for Android sind jetzt in Version 2 des Navigation SDK enthalten. Einige Funktionen wurden entfernt, da sie in einem Navigationskontext nicht benötigt wurden.

Wichtige Unterschiede

Das Maps SDK for Android war Teil der Google Play-Dienste.
Die Maps SDK for Android-Funktionen, die in Version 2 des Navigation SDK enthalten sind, basieren auf der neuen Version des Maps SDK for Android und sind nicht in den Google Play-Diensten enthalten. Diese neuen Funktionen werden auf einer neueren Engine als der in den Google Play-Diensten ausgeführt und haben mehrere Verbesserungen. Es bedeutet auch, dass die Karte im Prozess der App und nicht im Prozess der Google Play-Dienste ausgeführt wird.
Einige Kurse wurden umbenannt
In der folgenden Tabelle sind die Kurse aufgeführt, die umbenannt wurden. So konnten sie sich von ihrem Maps SDK for Android-Gegenstück unterscheiden.
Maps SDK for Android – KlassennameKlassenname des Navigation SDK
MapView.java NavigationView.java
MapFragment.java SupportNavigationFragment.java
Diese Klassen enthalten eine Kombination aus den Methoden, die in der alten NavigationView-Klasse und der aktuellen MapView-Klasse verfügbar sind. Sie können sich die Klassen MapView und MapFragment vorstellen, jedoch mit Navigationsunterstützung.
Entfernte Funktionen
Einige Maps-Elemente wurden entfernt, da sie im Navigationskontext keinen Sinn ergeben haben oder weil es technische Inkompatibilitäten gab. Zu den entfernten Funktionen gehören:
  • Street View
  • Lite-Modus, der zur Navigation nicht ausreicht.
  • Sie können keinen LocationProvider festlegen, wenn sich die Kamera im Folgemodus befindet. Das liegt daran, dass die Navigation auf RoadSnappedLocationProvider basiert und der Wechsel zu diesem Anbieter zu Problemen bei der Navigation führen kann.
  • Das Anwenden des minimalen/maximalen Zooms und der LatLng-Grenzen hat keine Auswirkungen, wenn sich die Kamera im Modus „Folgemodus“ befindet.
  • Wenden Sie sich an Ihren Kundenbetreuer, wenn die Probleme durch diese fehlenden Funktionen verursacht werden.

Migrationsanleitung

  1. Entfernen Sie die Maps SDK for Android-Integration aus Ihrem Build (d.h. Gradle). Wenn beide SDKs vorhanden sind, können Kompilierungsfehler auftreten.
  2. Ersetzen Sie Instanzen von MapView durch Instanzen von NavigationView.
  3. Ersetzen Sie Instanzen von MapFragment durch Instanzen von NavigationSupportFragment.

Wenn Ihre App bisher nicht das Navigation SDK verwendet hat, ist die Migration abgeschlossen.

Schritt 2: Von Version 1.x des Navigation SDK migrieren

Führe die folgenden Schritte aus, um deine v1.x-Integration des Navigation SDK zu v2 zu migrieren.

1. Karte mit neuen Methoden abrufen

Die Art und Weise, wie Sie Karten abrufen, hat sich geändert. Vor Version 2 haben Sie die Karte über einen synchronen Aufruf abgerufen. Verwenden Sie jetzt einen asynchronen Aufruf. In der folgenden Tabelle sind die alten und die neuen Methoden zum Abrufen der Karte aufgeführt.

Alte MethodeNeue Methode
NavigationView.getMap() NavigationView.getMapAsync()
SupportNavigationFragment.getMap() SupportNavigationFragment.getMapAsync()

2. Bibliotheken migrieren

Version 1.x des Navigation SDK enthielt eine eigene Implementierung mehrerer Maps SDK for Android-Klassen. Diese Klassen gehören zum Paket com.google.android.libraries.navigation.

In Version 2 wurden diese Klassen durch die Maps SDK for Android-Implementierungen ersetzt, die sich im Paket com.google.android.gms.maps.model befinden. Sie können Ihre Anwendung so migrieren, dass die neuen Klassen integriert werden. Dazu führen Sie Suchen und Ersetzen aus.

In der folgenden Tabelle sind die alten und die neuen Klassen aufgelistet.

Alter KursNeuer Kurs
com.google.android.libraries.navigation.LatLng com.google.android.gms.maps.model.LatLng
com.google.android.libraries.navigation.LatLngBounds com.google.android.gms.maps.model.LatLngBounds
com.google.android.libraries.navigation.Marker com.google.android.gms.maps.model.Marker
com.google.android.libraries.navigation.MarkerOptions com.google.android.gms.maps.model.MarkerOptions
com.google.android.libraries.navigation.VisibleRegion com.google.android.gms.maps.model.VisibleRegion

3. Änderungen an vorhandenen APIs berücksichtigen

In der folgenden Tabelle sind die wichtigsten Änderungen aufgeführt, die Google für Version 2 des Navigation SDK vorgenommen hat.

MethodeUmsteigen
NavigationApi.cleanup() Entfernt. Diese Methode wurde nicht für den normalen Betrieb verwendet und könnte zu unvorhersehbarem Verhalten führen. Sie müssen Aufrufe dieser Methode entfernen.
RoadSnappedLocationProvider.requestLocationUpdates() Entfernt. Verwenden Sie stattdessen addLocationListener().
RoadSnappedLocationProvider.stopRequestingLocationUpdates() Entfernt. Verwenden Sie stattdessen removeLocationListener().

4. Zur neuen Markierungsklasse wechseln

Version 2 des Navigation SDK verwendet jetzt dieselbe Implementierung der Marker-Klasse wie das Maps SDK for Android. Dadurch werden die folgenden Änderungen eingeführt.

MethodeUmsteigen
addMarker(MarkerOptions markerOptions) Verwendet jetzt die Klasse com.google.android.gms.maps.model.MarkerOptions.
removeMarker(Marker marker) Diese Methode ist nicht mehr vorhanden. Stattdessen hat die Klasse „Markierungen“ jetzt die Methode marker.remove().
removeAllMarkers() Diese Methode ist nicht mehr vorhanden, es gibt jedoch die Methode clear(), mit der alle Markierungen, Polylinien, Polygone und Overlays aus der Karte entfernt werden.

Unterschiede bei „MarkerOptions“

  • Die Methode describeContents() existiert in Version 2 des Navigation SDK nicht. Sie konnten die Ansichtsdaten durch Aufrufen von onSaveInstanceState() speichern. Jetzt müssen Sie die Ansichtsdetails selbst erfassen, damit Sie die Ansicht bei einer Konfigurationsänderung rekonstruieren können.
  • Die Methode navMarker#icon(BitMap) wurde in mapMarker#icon(BitmapDescriptor) geändert. Für diese Änderung müssen Sie von BitMap zu BitmapDescriptor migrieren.

Markierungsmethoden

Sie verwenden jetzt die Klasse Marker aus dem Paket com.google.android.gms.maps.model. In der folgenden Tabelle sind die Unterschiede bei der Verwendung dieser neuen Marker-Klasse aufgeführt.

MethodeUmsteigen
getAnchorU() Ist nicht mehr vorhanden.
getAnchorV() Ist nicht mehr vorhanden.
getIcon() Es ist nicht mehr vorhanden.
Sie müssen einen Verweis auf das Symbol selbst beibehalten, damit es nach einer Konfigurationsänderung verwendet werden kann, wenn Sie den Kartenstatus neu erstellen müssen.
getPosition() Ist noch vorhanden.
getTitle() Ist noch vorhanden.

5. Kamerasteuerung

Die in Version 1.x des Navigation SDK bereitgestellten Kamerasteuerelemente waren relativ eingeschränkt. In Version 2 des Navigation SDK wird jetzt dasselbe Kameramodell verwendet wie im Maps SDK for Android. Es gibt jedoch auch einen Folgemodus, der dem in Version 1.x des Navigation SDK ähnelt.

Wichtige Unterschiede

  • Die Klasse com.google.android.libraries.navigation.Camera wurde in Version 2 entfernt.
    • Camera.showRouteOverview() wurde in NavigationView und SupportNavigationFragment verschoben.
    • Die Methode Camera.followMyLocation() wurde in GoogleMap verschoben.
  • Aufrufe von Camera.setLocation() können entweder durch GoogleMap.moveCamera() oder GoogleMap.animateCamera() ersetzt werden.
  • setOnFollowMyLocationCallback() und isCameraFollowingMyLocation() wurden zu GoogleMap hinzugefügt, um weitere Informationen zum Folgemodus bereitzustellen.

Schritt 3: Aktivitätsabläufe zusammenführen

Wenn Sie zuvor Version 1 des Navigation SDK verwendet und der obigen Anleitung gefolgt sind, haben Sie Ihre Kartenanwendungsfälle zur Verwendung der Klasse NavigationView und Ihre Anwendungsfälle für die Navigation zur Verwendung von GoogleMap migriert. Sie haben jedoch zwei Instanzen von GoogleMap und zwei Instanzen von NavigationView. Das bedeutet, dass Sie weiterhin mehr Arbeitsspeicher als nötig verwenden und der Wechsel zwischen den beiden Instanzen zu wahrnehmbaren Pausen beim reibungslosen Rendering der Benutzeroberfläche führen kann. Zur Lösung dieses Problems sollten Sie Ihre Aktivitäts-/Fragmentabläufe zusammenführen, sodass sie sich eine einzige Instanz teilen können. Dies sorgt für eine reibungslosere Nutzererfahrung und optimierte Anwendungen.