En esta entrada veremos unos de los componentes fundamentales que podemos encontrar en cualquier dispositivo Android relativamente reciente y se trata de un sensor que permite medir la aceleración del dispositivo: el acelerómetro.
El acelerómetro en Android se mide en base a los tres ejes conocidos (X,Y y Z); cada uno de ellos puede ser accedido a través de la clase SensorManager
.
Empezando con la clase de SensorManager en Android
Debemos de implementar la clase de SensorEventListener
en nuestra actividad:
public class MainActivity extends Activity implements SensorEventListener
Una vez que implementamos la interfaz anterior debemos de sobrecargar los métodos:
@Override public void onSensorChanged(SensorEvent event) { } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }
Solicitando acceso al acelerómetro
Lo siguiente que debemos hacer es solicitar acceso al acelerómetro del dispositivo; y esto lo hacemos a través del objeto SensorManager
de la siguiente manera:
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Obtenemos el servicio del sistema a través del objeto getSystemService
pasando como parámetro el nombre del servicio al que queremos acceder.
Obteniendo el acelerómetro del sistema
De la lista de sensores de vuelta en la consulta anterior, verificamos si hay algun sensor de tipo acelerómetro disponible; para ello se emplea la siguiente línea de código:
sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).size()
Registrando el evento "Escuchador" o Listener del acelerómetro
Una vez que hayamos verificado que el dispositivo cuenta con al menos un sensor de tipo acelerómetro podemos registrar el evento listener o escuchador:
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST)
Pasamos como parámetro una instancia de la actividad, el acelerómetro y la tasa de refrescamiento, la cual puede ser:
- SENSOR_DELAY_FASTEST
- SENSOR_DELAY_NORMAL
- SENSOR_DELAY_GAME
- SENSOR_DELAY_UI
Lo único que varía entre ellas es la tasa de refrescamiento del acelerómetro.
Registrando el evento "Escuchador" o Listener
El método onSensorChanged
se activa cada vez que el sistema detecta un cambio en la aceleración del dispositivo:
@Override public void onSensorChanged(SensorEvent event) { sensor = ""; sensor = "x: " + event.values[0] + " y: " + event.values[1] + " z: " + event.values[2]; }
Con el parámetro SensorEvent
podemos tener entre varios datos, las coordenadas que el sistema usa en las rotaciones a través de los ejes X,Y y Z como vimos en el código anterior.
Puedes encontrar una aplicación funcional que ejemplifica el funcionamiento de los códigos vistos anteriormente en nuestro repositorio de GIT:
Captura de pantalla de la aplicación:
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter