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 Android Nom de classe du SDK Navigation MapView.java
NavigationView.java
MapFragment.java
SupportNavigationFragment.java
NavigationView
et la classeMapView
actuelle. Vous pouvez les considérer comme les classesMapView
etMapFragment
, 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 surRoadSnappedLocationProvider
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
- 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.
- Remplacez les instances de
MapView
par des instances deNavigationView
. - Remplacez les instances de
MapFragment
par des instances deNavigationSupportFragment
.
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éthode | Nouvelle 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 cours | Nouveau 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éthode | Changement |
---|---|
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éthodes liées aux repères
Méthode | Changement |
---|---|
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 appelantonSaveInstanceState()
. 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 parmapMarker#icon(BitmapDescriptor)
. Cette modification nécessite la migration deBitMap
versBitmapDescriptor
.
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éthode | Changement |
---|---|
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é versNavigationView
etSupportNavigationFragment
.- La méthode
Camera.followMyLocation()
a été déplacée versGoogleMap
.
- Vous pouvez remplacer les appels à
Camera.setLocation()
parGoogleMap.moveCamera()
ouGoogleMap.animateCamera()
. - Ajout de
setOnFollowMyLocationCallback()
etisCameraFollowingMyLocation()
à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.