Comment simuler un déplacement sur GoogleMap Android sans véritable GPS

Publié le 19 mars 2008 par Par Metaweb

Voici ma méthode pour tester et simuler les deplacements du téléphone Android avec le SDK. C'est cette méthode que j'utilise pour les simulations avec Molib.
Pour tous ceux qui font des applis avec googlemap et de la geolocalisation ça peut être super pratique !
1. Tout d'abord, il faut générer un itinéraire pour votre faux gps et simuler le déplacement du téléphone. Pour ce faire, j'utilise Google Earth.
1a. Télécharger et installer Google Earth.
1b. Dans la 'Recherche' dans la fenêtre en haut à gauche, cliquez sur l'onglet "Itinéraires" pour créer des itinéraires depuis un endroit à un autre.
1c. Votre itinéraire sera affiché juste en dessous de la fenêtre 'Recherche'.
Faites défiler vers le bas, cliquez droit sur la dernière entrée et sélectionner "Enregistrer sous ..." sous le format de type ". kml ".
J'ai appelé le mien "kml.kml". Enregistrez le à un endroit facile à trouver.
2. Maintenant, il faut créer un fichier "properties" pour le GPS. Tout d'abord, créez un fichier appelé "properties" au même endroit que le fichier kml - vous pouvez faire cela en créant un fichier texte et puis en changeant le nom en "properties" sans extension de fichier (Note: vous devez avez avoir l'option "Masquer les extensions des types de fichiers connus" désactivé dans "Options des dossiers -> Affichage"). Ouvrez ce fichier avec le bloc-notes et voilà ce que nous allons y mettre comme propriétés dans cet ordre:
RequiresNetwork
RequiresSatellite
RequiresCell
HasMonetaryCost
SupportsAltitude
SupportsBearing
SupportsSpeed
repeat (piste oscille du début à la fin au début)
PowerRequirement (1 = faible, 2 = moyenne, 3 = élevé)
accuracy (mètres)
TrackSpeed (km / heure, uniquement utilisées pour les kml)
Ainsi, par exemple, mon fichier "properties" a ces propriétés:
requiresNetwork false
requiresSatellite false
requiresCell false
hasMonetaryCost false
supportsAltitude true
supportsBearing true
supportsSpeed true
repeat true
powerRequirement 1
accuracy 10
trackSpeed 20
Sauvegardez le ensuite. "trackspeed" et "repeat" sont les deux plus importantes propriétés :la première définit à quelle vitesse Vous vous déplacez le long de la route kml (en km/h) et la seconde signifie que le téléphone se déplaçe le long de la route (vous pouvez changer cela si vous voulez arrêter le déplacement à la fin en le mettant à false).
3. Maintenant, vous devez créer votre faux GPS sur l'émulateur:
3bis. Par souci de facilité, déplacez le fichier kml et le fichier de propriétés dans le dossier "tools" de votre sdk Android.
3b. Lancez l'émulateur en double-cliquant sur "emulator.exe" , dossier "tools". Attendez qu'il démarre.
3c. Maintenant, ouvrez une invite de commande et accédez au dossier "tools" de votre sdk Android.
3d. Entrez "adb shell 'dans l'invite de commande.
3e. Vous devriez voir un # sur la gauche. Entrez "cd /data/misc/location". Si vous tapez "ls", vous devriez voir un dossier nommé "gps" . C'est le GPS par défaut fourni avec l'émulateur.
3f. Pour créer votre propre GPS entrez: "mkdir ". Par exemple j'ai appeler le mien molib :
"mkdir molib". Tapez "ls" à nouveau pour vérifier que le dossier a été créé.
3g. Tapez "exit" pour quitter le shell adb.
3h. Maintenant, nous avons besoin de mettre les fichiers dans notre dossier GPS.
D'abord le fichier kml: en ligne de commande sous dossier "tools" de votre sdk Android; tapez «adb push kml.kml adb /data/misc/location/kml".
Ensuite, le fichier de propriétés en tapant "adb push properties /data/misc/location/properties".
Dans mon cas vaut molib.
La raison pour laquelle je vous ai demander de déplacer les fichiers dans le répertoire tools à l'étape 3bis, était de simplifier les lignes de commandes.
3i. Fermer l'émulateur, puis tapez "adb kill-server" dans l'invite de commande afin de s'assurer que le serveur est mort.
4. Vous devriez maintenant pouvoir utiliser votre faux GPS dans votre appli.
Mais pour l'utiliser, vous devez modifier l'étape 2 de la méthode suivante ci-dessous pour obtenir votre nouveau GPS et non pas celui par défaut.
Pour utiliser le GPS dans votre appli :
1. La première chose que vous devez faire est d'obtenir un LocationManager:
myLocationManager (LocationManager)getSystemService(Context.LOCATION_SERVICE);
2. Ensuite, vous devez obtenir un LocationProvider (un objet qui fournit des rapports périodiques sur la situation géographique de l'appareil):
List myLocationProviders = myLocationManager.getProviders();
LocationProvider myProvider = myLocationProviders.get(0); // Lit le premier fournisseur disponible
Pour un nouveau provider GPS il faudrait changer par myLocationProviders.get(1);
NOTE: J'ai remarqué que l'ordre 0, 1 était fonction de l'ordre dans lequel apparaissait la liste des providers GPS à l'étape 3f plus haut. Je n'ai pas trop testé mais il faut faire attention à ça. Pour être sûr, il y a cette méthode qui permet de connâitre le nom du provider myLocationProviders.get(1).getName();
3. Vous pouvez alors soit simplement faire une requête pour connaître l'emplacement actuel:
// Retourne la localisation fixée par le provider donné
Location myLocation = myLocationManager.getCurrentLocation("gps");
dans le cas d'un nouveau GPS créer, il faut ecrire :
Location myLocation = myLocationManager.getCurrentLocation("gps"); //dans mon cas c'est "molib"
3a. Ou mettre en place une mise à jour périodique en utilisant cette méthode de la classe LocationMananger:
requestUpdates(LocationProvider provider, long minTime, float MinDistance, Intent intent)
qui reçoit les mises à jour en créant un IntentReceiver. La localisation courante peut ensuite être récupérée auprès de l'Intent comme un objet Location en appelant intent.getExtra("location"). (attention méthode déprécié) Je ne vais pas expliquer cela en détail pour le moment, mais si vous ne voulez en savoir plus il suffit de demander.
Pour rappel, la version béta de molib est localisée par défaut sur le parvis de Notre-Dame à Paris et la réactualisation de la localisation est désactivé.