mars
2010
Durant le développement d’une application Android, il arrive parfois que le téléphone mobile utilisé pour les tests ne soit pas sous la main. C’est pourquoi Google fournit un émulateur avec le SDK. Malheureusement ses fonctions restent limitées. En effet il ne permet pas de simuler la boussole, les changements d’orientation ou bien encore les accélérations auxquelles le téléphone est soumis. C’est par hasard que je suis tombé sur le projet OpenIntents hébergé sur Google Code. En plus de proposer des Intents open-sources, l’équipe met à disposition des outils pour les développeurs dont Sensor Simulator.
Sensor Simulator simule 4 capteurs : l’accéléromètre, la boussole magnétique, les changements d’orientations et le thermomètre (qui ne nous intéresse pas). Sont absents le détecteur de proximité et de luminosité. L’outil se décompose en une application Java s’exécutant sur le poste de travail et d’une application Android tournant en tâche de fond qui simulera les stimulations des capteurs sur le téléphone.
Nous allons voir l’installation, la configuration et les quelques modifications à apporter à une application pour prendre en compte le simulateur.
Un bon dessin valant mieux qu’un long discours. Voici une illustration de son fonctionnement issue de la page du projet :
> Installation de SensorSimulator
>> Téléchargement
A l’heure où j’écris ces lignes, la version actuelle est la 1.0.0 beta1
.
Lien pour le téléchargement : http://openintents.googlecode.com/files/sensorsimulator-1.0.0-beta1.zip.
L’archive est à décompresser dans le répertoire de votre choix.
Elle se présente ainsi :
- bin/ : l’application pour le poste de travail sensorsimulator.jar et celle pour Android SensorSimulatorSettings.apk
- lib/ : sensorsimulator-lib.jar, la librairie à rajouter à votre application le temps des tests
- release/ : fichier Ant pour reconstruire sensorsimulator.jar
- samples/ : l’application de démo
- SensorSimulator/ : les sources de l’application pour le poste de travail
- SensorSimlatorSetting/ : les sources de l’application Android
>> Installation sur le poste de travail
Aucune installation n’est nécessaire. Il suffit simplement de lancer le fichier jar sensorsimulator.jar du répertoire bin/ pour que l’application démarre et apparaisse à l’écran.
Une applet est également disponible à cette adresse : http://www.openintents.org/en/node/6
>> Installation sur le téléphone
Il est nécessaire d’installer SensorSimulatorSettings.apk sur l’émulateur. Deux manières s’offrent à nous :
- En ligne de commande, dans le répertoire bin/, une fois l’émulateur démarré :
adb -install SensorSimulatorSettings.apk
- Sous Eclipse, en créant un projet Android, puis en sélectionnant les sources du répertoire SensorSimlatorSetting/. Vous devrez indiquer une version minimum du SDK et l’ajouter dans le fichier
AndroidManifest.xml
(<uses-sdk android:minSdkVersion="7">
)
L’application SensorSimulatorSettings
doit tourner en tâche de fond pendant les tests.
> Configuration
Il ne vous reste plus qu’à configurer les deux applications pour qu’elles communiquent entre elles.
- Sur votre poste de travail, lancer en premier
SensorSimulator.jar
. Le port sur lequel se fera la communication peut être changé. Vous pouvez laisser le numéro par défaut 8010 : - Sous Android, lancez l’application
SensorSimulatorSetting
. Dans l’onglet Setting, saisissez le numéro de port et l’adresse IP10.0.2.2
pour indiquer la boucle locale de votre poste de travail à l’émulateur (et non0.0.0.0
qui fait référence à l’émulateur lui même) :Dans l’onglet Testing, cliquez sur « connect » puis cochez les 3 capteurs :
Si tout se passe bien, en bougeant le pavé rouge de SensorSimulator.jar
sur votre poste de travail, les valeurs des capteurs devraient se mettre à jour sous Android.
> Modifications à apporter dans votre application
Les modifications à apporter aux applications ne sont pas nombreuses.
Avant tout, il est nécessaire d’ajouter sensorsimulator-lib.jar
à son projet. La librairie se trouve dans le répertoire lib/ de l’archive téléchargée.
SensorEmulator n’ayant pas été porté sous Android 2.1, l’Activity doit implémenter l’interface dépréciée SensorListener au lieu de SensorEventListener.
La méthode onSensorChanged(int , float[] )
doit alors être définie :
1
2
3
4
5
6
7
8
9
10
11
12
13 public void onSensorChanged(int sensor, float[] values) {
switch(sensor) {
case SensorManager.SENSOR_ACCELEROMETER:
Log.i("onSensorChanged","Accelerometer: " + values[0] + ", " + values[1] + ", " + values[2]);
break;
case SensorManager.SENSOR_MAGNETIC_FIELD:
Log.i("onSensorChanged","Compass: " + values[0] + ", " + values[1] + ", " + values[2]);
break;
case SensorManager.SENSOR_ORIENTATION:
Log.i("onSensorChanged","Orientation: " + values[0] + ", " + values[1] + ", " + values[2]);
break;
}
}
Nous déclarons un SensorManagerSimulator
dans l’activity :
private SensorManagerSimulator sensorManager = null;
… que nous initialisons dans la méthode onCreate()
:
1
2 sensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
sensorManager.connectSimulator();
Pour terminer, il reste à définir la liste des capteurs en écoute dans la méthode onResume()
, de la même manière qu’avec le SensorManager du SDK :
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, SensorManager.SENSOR_ACCELEROMETER |
SensorManager.SENSOR_MAGNETIC_FIELD |
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onStop() {
sensorManager.unregisterListener(this);
super.onStop();
}
The end
> Ressources