Accéléromètre

 

Les accéléromètres permettent de connaître les accélérations (ici linéaires) de l'appareil suivant 3 axes orthogonaux x, y et z.

 

Explications

Dans vos programmes, pour être informé des accélérations, vous utiliserez un listener. Pour cela, vous implémenterez SensorEventListener dans votre classe.

Deux méthodes seront alors mises à votre disposition:

public void onSensorChanged(SensorEvent event); Déclenchée lorsqu'un évènement arrive sur l'un des accéléromètres.
public void onAccuracyChanged(Sensor sensor, int accuracy); Déclenchée lorsque la précision de l'accéléromètre change.

Pour pouvoir utiliser les informations de l'accéléromètre, vous aurez besoin de créer une pseudo instance SensorManager en passant par une méthode de l'interface context de la manière suivante:

SensorManager manager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);

Vous pourrez dès lors vérifier l'existance de l'accéléromètre en demandant:

manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size(). Si la valeur retournée est > 0, alors c'est bon !

 

Maintenant que vous savez qu'il existe, vous allez pouvoir récupérer celui-ci:

Sensor accelerometre = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);

Pour enfin, positionner votre listener dessus:

boolean success = manager.registerListener(listener, accelerometre, SensorManager.SENSOR_DELAY_xxx);

Image non trouvée !Il sera judicieux de positionner le listener lors du onResume(). En complément, de libérer le listener lors du onPause() comme ceci: manager.unregisterListener(listener);

Avec listener, une classe SensorEventListener qui recevra les informations

accelerometre, votre accelerometre déterminé via le getSensorList

Et SensorManager.SENSOR_DELAY_xxx, la périodicité des appels au listener, voici les valeurs possibles:

int SENSOR_DELAY_FASTEST Le plus vite possible
int SENSOR_DELAY_GAME Spécial jeu
int SENSOR_DELAY_NORMAL Défaut, pour indiquer un changement d'orientation de l'écran
int SENSOR_DELAY_UI Pour une interface utilisateur

 

Maintenant, deux méthodes pourront être déclenchées dans le listener et seront donc à définir:

La première n'est pas vraiment intéressante

public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

Mais la seconde bien plus, car c'est elle qui va vous indiquer les accélérations

public void onSensorChanged(SensorEvent event) {
}

Avec SensorEvent.values qui est un tableau de 3 éléments (1 par axe soit value[SensorManager.DATA_X] pour l'axe X, value[SensorManager.DATA_Y] pour l'axe Y et value[SensorManager.DATA_Z] pour l'axe Z !

 

Exemple de code

Très simple, ce code va afficher les valeurs x, y et z à l'écran.

Un fichier AccelerActivity.java

Image non trouvée !Plutôt que de recourir à accelerometre = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0) qui est peut-être hazardeux pour récupérer un accéléromètre, on peut utiliser accelerometre = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) pour trouver l'accélérateur par défaut.

Et son main.xml