¿Como se hace?
Registrando un suscribindose a un Listener ¿a cual? a SensorEventListener
SensorEventListener tiene dos métodos:
public void onSensorChanged(SensorEvent event);
public void onAccuracyChanged(Sensor sensor, int accuracy);
El primero es llamado cuando llega el evento. El segundo cuando cambia la precisión. Sólo nos interesa el primero.
Primero se comprueba que efectivamente el dispositvo tien acelerométro.
¿Como? Así:
SensorManager manager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
boolean hasAccel = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size() > 0;
Para subscribirnos al SensorEventListener
Sensor sensor = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
boolean success = manager.registerListener( listener, sensor,
SensorManager.SENSOR_DELAY_GAME);
SensorManager.SENSOR_DELAY_GAME es una constante que especifica cada cuanto debe actualizarse el sensor con el ultimo estado del acelerómetro.
SensorManager.registerListener() devuelve un booleano que hay que consultar para saber si hemos tenido exito
o no. Una vez registrado el escuchador recibiremos SensorEvents en el método SensorEventListener.onSensorChanged().
Este método sólo es llamado cuando el estado del sensor ha cambiado.
¿Como procesarlo?
Con SensorEvent.values que es un array de floats público donde:
SensorEvent.values[0] => Eje X
SensorEvent.values[1] => Eje Y
SensorEvent.values[2] => Eje Z
public class PruebaAcelerometro extends Activity implements SensorEventListener
{
TextView textView;
@Override public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
textView = new TextView(this);
setContentView(textView);
SensorManager manager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
if (manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size() == 0)
{
textView.setText("No accelerometer installed");
}
else
{
Sensor accelerometer = manager.getSensorList(
Sensor.TYPE_ACCELEROMETER).get(0);
if (!manager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_GAME))
{
textView.setText("No puedo registrar el escuchador del sensor");
}
}
}
@Override public void onSensorChanged(SensorEvent event)
{
float x =event.values[0];
float y =event.values[1];
float z =event.values[2];
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
}