Guide de migration

La principale modification apportée par Google au SDK Navigation pour la version 2 est le remplacement de plusieurs classes du SDK Navigation par leurs équivalents du SDK Maps pour Android.

À partir de la version 2.2, le SDK Navigation remplace (presque) l'API Maps des services Google Play. Au lieu de reempaqueter toutes les API dans com.google.android.libraries.maps, elles ont été empaquetées dans com.google.android.gms.maps, tout comme les services Google Play. Cela simplifie considérablement le basculement entre une version des services Google Play et le SDK Navigation.

Avantages

  • Meilleure utilisation de la mémoire. Vous utilisez désormais moins de mémoire et de bande passante que si vous utilisiez à la fois le SDK Navigation et le SDK Maps pour Android.
  • Le passage du mode Plan au mode Navigation est désormais plus fluide et plus facile à utiliser.
  • Vous pouvez désormais mieux contrôler la caméra.
  • Vous pouvez désormais dessiner des polylignes et des superpositions, et ajouter des styles personnalisés à la carte.

Toutefois, des fonctionnalités telles que Street View et le mode simplifié ne sont pas disponibles.

Prérequis

  • La version 2 du SDK Navigation utilise Android Jetpack, une suite de bibliothèques, d'outils et de conseils qui facilite l'écriture d'applications de haute qualité. Ce déplacement signifie que vous devez migrer votre application pour qu'elle n'utilise plus les bibliothèques Support pour utiliser AndroidX. Pour en savoir plus, consultez Migrer vers AndroidX.

Étape 1. Migrer depuis le SDK Maps pour Android

La plupart des fonctionnalités du SDK Maps pour Android sont désormais incluses dans la version 2 du SDK Navigation. Quelques fonctionnalités ont été supprimées, car elles n'étaient pas nécessaires dans un contexte de navigation.

Différences importantes

Le SDK Maps pour Android se trouvait dans les services Google Play.
Les fonctionnalités du SDK Maps pour Android incluses dans la version 2 du SDK Navigation sont basées sur la nouvelle version du SDK Maps pour Android et ne font pas partie des services Google Play. Ces nouvelles fonctionnalités s'exécutent sur un moteur plus récent que celui des services Google Play et présentent plusieurs améliorations. Cela signifie également que la carte s'exécute dans le processus de votre application, et non dans le processus des services Google Play.
Certains cours ont été renommés
Le tableau suivant liste les classes qui ont été renommées. Cela nous a permis de les différencier de leur équivalent SDK Maps pour Android.
Nom de classe du SDK Maps pour AndroidNom de classe du SDK Navigation
MapView.java NavigationView.java
MapFragment.java SupportNavigationFragment.java
Ces classes contiennent un mélange des méthodes disponibles dans l'ancienne classe NavigationView et la classe MapView actuelle. Vous pouvez les considérer comme les classes MapView et MapFragment, mais avec une prise en charge de la navigation.
Fonctionnalités supprimées
Certains éléments Maps ont été supprimés parce qu'ils n'avaient aucun sens dans un contexte de navigation ou en raison d'incompatibilités techniques. Les fonctionnalités supprimées incluent :
  • Street View
  • Le mode simplifié, qui est insuffisant pour la navigation.
  • Vous ne pouvez pas définir de LocationProvider lorsque la caméra est en mode Suivre. En effet, la navigation repose sur RoadSnappedLocationProvider et le passage à ce fournisseur peut entraîner des problèmes lors de la navigation.
  • L'application du zoom minimal/maximal et des limites LatLng n'a aucun effet lorsque la caméra est en mode suivi.
  • Veuillez contacter votre conseiller clientèle si ces fonctionnalités ne sont pas à l'origine du problème.

Étapes de migration

  1. Supprimez l'intégration du SDK Maps pour Android de votre build (c'est-à-dire Gradle). L'utilisation des deux SDK entraînera des erreurs de compilation.
  2. Remplacez les instances de MapView par des instances de NavigationView.
  3. Remplacez les instances de MapFragment par des instances de NavigationSupportFragment.

Si votre application n'utilisait pas le SDK Navigation auparavant, la migration est terminée.

Étape 2. Effectuer une migration depuis la version 1.x du SDK Navigation

Procédez comme suit pour migrer votre intégration du SDK Navigation de la version 1.x vers la version 2.

1. Obtenir la carte à l'aide de nouvelles méthodes

Le mode d'obtention d'une carte a changé. Avant la version 2, vous deviez obtenir la carte via un appel synchrone. Vous allez maintenant utiliser un appel asynchrone. Le tableau suivant liste les anciennes méthodes ainsi que les nouvelles pour obtenir la carte.

Ancienne méthodeNouvelle méthode
NavigationView.getMap() NavigationView.getMapAsync()
SupportNavigationFragment.getMap() SupportNavigationFragment.getMapAsync()

2. Migrer des bibliothèques

La version 1.x du SDK Navigation contenait sa propre implémentation de plusieurs classes du SDK Maps pour Android. Ces classes appartenaient au package com.google.android.libraries.navigation.

Dans la version 2, ces classes ont été remplacées par les implémentations du SDK Maps pour Android, qui se trouvent sous le package com.google.android.gms.maps.model. Vous pouvez migrer votre application pour intégrer les nouvelles classes en effectuant une recherche et un remplacement.

Le tableau suivant liste les anciennes et les nouvelles classes.

Ancien coursNouveau cours
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. Prise en compte des modifications apportées aux API existantes

Le tableau suivant répertorie les principales modifications apportées par Google à la version 2 du SDK de navigation.

MéthodeChangement
NavigationApi.cleanup() Supprimé. Cette méthode n'a pas été utilisée pour un fonctionnement normal et pouvait entraîner un comportement imprévisible. Vous devez supprimer les appels à cette méthode.
RoadSnappedLocationProvider.requestLocationUpdates() Supprimé. Utilisez plutôt addLocationListener().
RoadSnappedLocationProvider.stopRequestingLocationUpdates() Supprimé. Utilisez removeLocationListener() à la place.

4. Passer à la nouvelle classe Marker

La version 2 du SDK Navigation utilise désormais la même implémentation de la classe Marker que le SDK Maps pour Android. Cela entraîne les modifications suivantes.

MéthodeChangement
addMarker(MarkerOptions markerOptions) Utilise désormais la classe com.google.android.gms.maps.model.MarkerOptions.
removeMarker(Marker marker) Cette méthode n'existe plus. À la place, la classe Marker dispose désormais d'une méthode marker.remove().
removeAllMarkers() Cette méthode n'existe plus, bien qu'il existe une méthode clear() qui supprime tous les repères, polylignes, polygones et superpositions de la carte.

Différences entre MarkerOptions

  • La méthode describeContents() n'existe pas dans la version 2 du SDK Navigation. Il vous a permis d'enregistrer les données de la vue en appelant onSaveInstanceState(). Vous devez maintenant suivre vous-même les détails de la vue afin de pouvoir la reconstruire en cas de modification de sa configuration.
  • La méthode navMarker#icon(BitMap) a été remplacée par mapMarker#icon(BitmapDescriptor). Cette modification nécessite la migration de BitMap vers BitmapDescriptor.

Méthodes des repères

Vous allez maintenant utiliser la classe Marker du package com.google.android.gms.maps.model. Le tableau suivant répertorie les différences d'utilisation de cette nouvelle classe Marker.

MéthodeChangement
getAnchorU() n'existe plus.
getAnchorV() n'existe plus.
getIcon() n'existe plus.
Vous devez conserver vous-même une référence à l'icône, pour l'utiliser après une modification de configuration lorsque vous devez recréer l'état de la carte.
getPosition() Existe encore.
getTitle() Existe encore.

5. Contrôle de la caméra

Les commandes de caméra fournies dans la version 1.x du SDK Navigation étaient relativement limitées. La version 2 du SDK Navigation utilise désormais le même modèle d'appareil photo que celui utilisé par le SDK Maps pour Android, sauf que vous bénéficiez également d'un mode Suivre semblable à celui de la version 1.x du SDK Navigation.

Différences majeures

  • La classe com.google.android.libraries.navigation.Camera a été supprimée dans la version 2.
    • Camera.showRouteOverview() a été déplacé vers NavigationView et SupportNavigationFragment.
    • La méthode Camera.followMyLocation() a été déplacée vers GoogleMap.
  • Vous pouvez remplacer les appels à Camera.setLocation() par GoogleMap.moveCamera() ou GoogleMap.animateCamera().
  • Ajout de setOnFollowMyLocationCallback() et isCameraFollowingMyLocation() à GoogleMap pour fournir plus d'informations sur le mode suivi.

Étape 3. Fusionner les flux d'activité

Si vous utilisiez auparavant la version 1 du SDK Navigation et que vous avez suivi les instructions ci-dessus, vous avez migré vos cas d'utilisation de carte pour utiliser la classe NavigationView et vos cas d'utilisation de la navigation vers GoogleMap. Cependant, vous avez deux instances de GoogleMap et deux instances de NavigationView. Cela signifie que vous utiliserez toujours plus de mémoire que nécessaire et que le basculement entre les deux instances peut entraîner des pauses perceptibles dans le rendu fluide de l'interface utilisateur. Pour résoudre ce problème, vous devez fusionner vos flux d'activité/fragment afin qu'ils puissent partager une seule instance. Cela offre une expérience utilisateur plus fluide et simplifie votre application.