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);
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
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