Sensores
En el siguiente ejemplo se van a recuperar los valores devueltos por los sensores del dispositivo:
Primeramente, instancia SensorManager
.
SensorManager sensorManager;
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
A través de sensorManager
se podrá consultar los valores de distintos sensores. Por ejemplo:
Listar todos los sensores
public void listadoSensores(View v) {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); // Se puede seleccinar el tipo
for (int i = 0; i < sensors.size(); i++) {
Log.i("prueba", sensors.get(i).getName());
}
}
Observa como se ha llamado a sensorManager.getSensorList()
y recuperando todos los tipos de sensores definidos mediante la constante Sensor.TYPE_ALL
.
Mostrar el valor del acelerómetro
Implementa la interface SensorEventListener
y los métodos onSensorChanged()
y onAccuracyChanged()
.
public class MainActivity extends AppCompatActivity implements SensorEventListener {
...
}
Recuerda instanciar siempre que se necesite sensorManager
.
public void acelerometro(View v) {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor acelerometro = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Toast.makeText(this, acelerometro.getName(), Toast.LENGTH_SHORT).show();
sensorManager.registerListener(this, acelerometro, SensorManager.SENSOR_DELAY_NORMAL);
}
Únicamente recuperamos el tipo de sensor Sensor.TYPE_ACCELEROMETER
. Además, registramos un listener a sensorManager
que hará que el método onSensorChanged()
sea llamado periódicamente, con un intervalo de tiempo definido en SensorManager.SENSOR_DELAY_NORMAL
.
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
switch (sensorEvent.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
ArrayList<Float> valores = new ArrayList<Float>();
Log.i("prueba", "Cantidad de valores: " + sensorEvent.values.length);
for (int i = 0; i < sensorEvent.values.length; i++){
valores.add(sensorEvent.values[i]);
}
Log.i("prueba", valores.toString());
break;
}
}
Podemos guardar los valores recuperados en una lista, ya que dependiendo del tipo de sensor la cantidad de valores devueltos varía.