Ce tutoriel permet de découvrir l’utilisation de l’accéléromètre mais peut être étendu à tout les capteurs du téléphone de façon assez simple car tout les capteurs sont accessible de façon similaire dans Android.

Commençons par créer un nouveau projet de type Hello World :

public class bla extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

}

Maintenant, pour avoir accès à l’accéléromètre, nous allons récupérer le « handler » du service système correspondant :

SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

Ensuite, il va falloir, grâce au handler « m », enregistrer une classe chargée de recevoir les évènements liée à l’accéléromètre.

En effet, les capteurs sont accessibles sur un mode asynchrone.

D’abord créons notre classe capteur :

class capteur implements SensorListener{

    public void onSensorChanged(int sensor, float[] values) {

    }

};

Le nom de la méthode à écrire est assez explicite. C’est elle qui sera appelée par le système lorsque les valeurs du capteur visé vont changer.

Dans le cas de l’accéléromètre, on cherche les valeurs des forces s’exerçant sur l’axe des x, des y et des z :

class capteur implements SensorListener{

    float x, y, z;

   

    public void onSensorChanged(int sensor, float[] values) {

        x = values[0];

        y = values[1];

        z = values[2];

    }

};

Maintenant que nous avons cette classe, la première chose est de l’instancier dans notre « Activity » :

private capteur accelerometre;

Puis, nous allons l’enregistrer auprès du gestionnaire de capteur, et du même coup spécifier que nous voulons l’accéléromètre (et pas le magnétomètre, ou autre). Pour ce faire, dans notre méthode onCreate, rajoutons ceci :

m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);

Voilà, nous avons l’essentiel. A vous de donner un contenu à la fonction onSensorChanged pour créer des actions en fonctions des mouvements du téléphone.

Pour autant, afin de conclure ce tutoriel, voici le code qui permet d’afficher les valeurs des forces :

public class hello extends Activity {

private capteur accelerometre;

@Override

    public void onCreate(Bundle savedInstanceState) {

String txt = new String();

TextView tv = new TextView(this);

accelerometre = new capteur();

super.onCreate(savedInstanceState);        

        SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

        m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);

       

        txt = « X : «  + accelerometre.x;

        txt = txt + « \nY : «  + accelerometre.y;

        txt = txt + « \nZ : «  + accelerometre.z;

       

        tv.setText(txt);

        setContentView(tv);

    }

}

 

class capteur implements SensorListener{

    float x, y, z;

   

    public void onSensorChanged(int sensor, float[] values) {

        x = values[0];

        y = values[1];

        z = values[2];

    }

};

 

Pour « compiler », pensez à faire un ctrl+maj+o pour qu’Eclipse complète les dépendances avec les « import » qui vont bien.

Les valeurs retournées par l’accéléromètre sont exprimées en G. Sur l’émulateur, l’accéléromètre renvoie 0, 0, 0 soit aucune force (apesanteur ou chute libre).