Simulation du GPS avec l'emulateur android
Par Arnaud Weber le jeudi 12 mars 2009, 15:11 - Lien permanent
Peut être avez vous eu des difficultés à faire fonctionner la simulation de coordonnées GPS sur votre emulateur android. Ce post parle d'un bug méconnu de l'émulateur GPS dans la version 1.1rc1 du SDK et vous propose un petit programme permettant de tester l'émulation des coordonnées GPS.
Probleme d'internationalisation
Un bug majeur sur le format des nombres a été repéré: la mise à jour des coordonnées GPS se fait en utilisant les paramètres par défaut d'internationalisation du système. c'est à dire qu'en France la longitude et la latitude sont envoyées sous le format "120,0832" au lieu de "120.0832". Cela engendre un bug critique qui empêche la mise à jour des coordonnées dans votre émulateur.
Afin de faire fonctionner l'émulateur sous windows, faites bien attention à
modifier vos options régionales en les passant en anglais. Vos nombres seront
ainsi envoyés au format anglo-saxons.
Petit programme de test
Nous allons ici créer un petit programme android afin de tester que votre emulateur arrive à simuler des changements de coordonnées GPS.
Créez d'abord un projet android (appelé GPSTest dans notre exemple)
Ouvrez le fichier androidManifest.xml et ajoutez la ligne suivante :
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
Dans votre activité par défaut (ici GPSTest) :
- ajoutez la variable suivante :
private LocationManager lm;
- dans la méthode onCreate ajoutez après setContentView(R.layout.main) :
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000l, 10l, new LocationListener(){
public void onLocationChanged(Location arg0) {
String lat = String.valueOf(arg0.getLatitude());
String lon = String.valueOf(arg0.getLongitude());
Log.e("GPS", "location changed: lat="+lat+", lon="+lon);
}
public void onProviderDisabled(String arg0) {
Log.e("GPS", "provider disabled " + arg0);
}
public void onProviderEnabled(String arg0) {
Log.e("GPS", "provider enabled " + arg0);
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
Log.e("GPS", "status changed to " + arg0 + "-" + arg1 + "-");
}
});
Explications : Dans un premier temps, on récupère un location manager auprès du context.
On inscrit ensuite auprès de ce manager un callback appelé au maximum une fois par seconde lorsque la position GPS du téléphone varie de 10 mètres ou plus.
Executez le programme sur votre émulateur puis ouvrez les vues "emulateur control" et "LogCat" dans eclipse ( windows -> show views -> other -> android).
Vous pouvez éventuellement utiliser directement le programme DDMS fourni dans le SDK
Changez la localisation dans votre emulateur control et observez les logs. vous devriez voir apparaître le log indiquant que la position a bien été changée.
Conclusion
Ce petit programme devrait vous permettre de tester la connexion de votre environnement de travail avec l'émulateur en utilisant le Mock du GPS. J'espère vous avoir épargné de nombreuses heures de recherche frustrantes et infructueuses a propos du bug de l'internationalisation.
