Los Sensores en nuestro teléfono Android - Introducción

Creada: Septiembre 2014
Actualizada: Junio 2016

Después del "paron de verano" (y vaya paron xD) he decidido comenzar estas nuevas lecciones con algo que me guste y que sobre todo me divierta hacerlo (sobre todo para retomar el ritmo perdido). Cuando hice mi primera practica con los sensores que tenia mi teléfono Android, quede flipado con todo lo que se podía hacer!! para mi, esto de los sensores es de las cosas mas interesantes y divertidas con las que podemos hacer con nuestro teléfono Android ¡¡empecemos!!

Eclipse, Java, Android
Eclipse, Java, Android

Antes de nada tengo que decirte, que esta Introducción va a ser muy teórica, la practica vendrán en las siguientes, pero creo que para dar mas calidad al sitio debo de ir poniendo mas teórica intentando mantener el idioma que entendemos todos (que esa es la esencia de esta web). Bueno no te aburro mas, para ir entrando en materia e ir poco a poco aclarando conceptos, he de decirte, que la plataforma Android organiza y/o clasifica los sensores en tres categorías:

Sensores de movimiento en nuestro Android
Estos sensores miden las fuerzas de aceleración y fuerzas de rotación a lo largo de tres ejes. En esta categoría incluimos los acelerómetros, sensores de gravedad, giroscopios y sensores de rotación del vector.

Sensores ambientales en nuestro Android
Estos sensores miden diversos parámetros ambientales, como la temperatura del aire ambiente y la presión, la iluminación, y la humedad. En Esta categoría incluimos: barómetros, fotómetros y termómetros.

 Sensores de posición en nuestro Android
Estos sensores miden la posición física de un dispositivo. Esta categoría incluye los sensores de orientación y magnetómetros.

Bueno, llegados a este punto.... ¡no te hagas ilusiones! decirte que no todos los sensores los tendremos integrados en nuestro teléfono, eso dependerá del fabricante y calidad de nuestro teléfono. En mi caso ahora tengo un Nexus4 y tengo bastantes sensores, pero anteriormente tenia el Samsung Galaxy S y.... en fin.... tenia menos! ;P

Para comenzar a usar los sensores, necesitaremos acceder a los sensores disponibles en el dispositivo y adquirir los datos brutos del sensor a través del framework (instrucciones propias) del sensor Android. Este framework del sensor proporciona varias clases e interfaces que ayudan a realizar una amplia variedad de tareas relacionados con los sensores. Por ejemplo, puede utilizar el Framework del sensor para hacer lo siguiente:

 Determinar qué sensores están disponibles en un dispositivo.
 Determinar las capacidades de un sensor individual, tales como su alcance máximo, fabricante, requerimientos de energía y resolución.
 Adquirir los datos del sensor y definir la tasa mínima a la que adquiere los datos.
 Registar y Eliminar la actualización de los sensores y eventos de los sensores que monitorean los cambios del sensor.

Te pongo la tabla de la documentación oficial Android con todos los sensores disponibles, fíjate que algunos pone que son de tipo Software, eso quiere decir que un sensor de tipo software es un calculo que hace el sistema apartir de otro de tipo Hardware. Por ejemplo, el sensor de Orientación es un sensor que te devuelve la posicion del teléfono (3 posibles estados, vertical, horizontal Izq. y horizontal derecha) realmente utiliza el giroscopio para determinar esto, pero este sensor por software "simplifica" el uso y nos devuelve directamente estos datos.

Table 1. Tipos de Sensores soportados en la plataforma Android.

Sensor Type Description Common Uses
TYPE_ACCELEROMETER Hardware Mide la fuerza de aceleracion en m/s2 esto aplica al dispositivo en sus tres ejes (x, y, and z), incluye en la medida la fuerza de la gravedad.. Motion detection (shake, tilt, etc.).
TYPE_AMBIENT_TEMPERATURE Hardware Measures the ambient room temperature in degrees Celsius (°C). See note below. Monitoring air temperatures.
TYPE_GRAVITY Software or Hardware Measures the force of gravity in m/s2 that is applied to a device on all three physical axes (x, y, z). Motion detection (shake, tilt, etc.).
TYPE_GYROSCOPE Hardware Measures a device's rate of rotation in rad/s around each of the three physical axes (x, y, and z). Rotation detection (spin, turn, etc.).
TYPE_LIGHT Hardware Measures the ambient light level (illumination) in lx. Controlling screen brightness.
TYPE_LINEAR_ACCELERATION Software or Hardware Measures the acceleration force in m/s2 that is applied to a device on all three physical axes (x, y, and z), excluding the force of gravity. Monitoring acceleration along a single axis.
TYPE_MAGNETIC_FIELD Hardware Measures the ambient geomagnetic field for all three physical axes (x, y, z) in μT. Creating a compass.
TYPE_ORIENTATION Software Measures degrees of rotation that a device makes around all three physical axes (x, y, z). As of API level 3 you can obtain the inclination matrix and rotation matrix for a device by using the gravity sensor and the geomagnetic field sensor in conjunction with the getRotationMatrix() method. Determining device position.
TYPE_PRESSURE Hardware Measures the ambient air pressure in hPa or mbar. Monitoring air pressure changes.
TYPE_PROXIMITY Hardware Measures the proximity of an object in cm relative to the view screen of a device. This sensor is typically used to determine whether a handset is being held up to a person's ear. Phone position during a call.
TYPE_RELATIVE_HUMIDITY Hardware

Mide la Humedad relativa ambiente en porcentage (%).

Monitoring dewpoint, absolute, and relative humidity.
TYPE_ROTATION_VECTOR Software or Hardware Measures the orientation of a device by providing the three elements of the device's rotation vector. Motion detection and rotation detection.
TYPE_TEMPERATURE Hardware

Mide la temperature del dispositivo en (°C). Este sensor es reemplazado a partir de la API 14 por: TYPE_AMBIENT_TEMPERATURE

Monitoring temperatures.

Valla rollo que estoy soltando!! bueno no te agobies, toda esta informacion viene bien para consultar, pero no es imprescindible para usarlos, de hecho creo que el uso de los sensores es muuuucho mas fácil que el del GPS, así que... ¡no te preocupes!

Por ultimo te pongo otra tabla que creo que es interesante, ya que si piensas hacer una aplicación y usar unos sensores, deberás tener en cuenta esto o es posible que algún sensor no te valla según en que API, aunque si haces algo mal, como usar un sensor que no soporta el Target que usas en tu proyecto, Eclipse te lo avisara por medio de una alerta subrayándote la línea de código que no es compatible.

Table 2. Sensores disponibles por plataforma.

Sensor Android 4.0
(API Level 14)
Android 2.3
(API Level 9)
Android 2.2
(API Level 8)
Android 1.5
(API Level 3)
TYPE_ACCELEROMETER Yes Yes Yes Yes
TYPE_AMBIENT_TEMPERATURE Yes n/a n/a n/a
TYPE_GRAVITY Yes Yes n/a n/a
TYPE_GYROSCOPE Yes Yes n/a1 n/a1
TYPE_LIGHT Yes Yes Yes Yes
TYPE_LINEAR_ACCELERATION Yes Yes n/a n/a
TYPE_MAGNETIC_FIELD Yes Yes Yes Yes
TYPE_ORIENTATION Yes2 Yes2 Yes2 Yes
TYPE_PRESSURE Yes Yes n/a1 n/a1
TYPE_PROXIMITY Yes Yes Yes Yes
TYPE_RELATIVE_HUMIDITY Yes n/a n/a n/a
TYPE_ROTATION_VECTOR Yes Yes n/a n/a
TYPE_TEMPERATURE Yes2 Yes Yes Yes

 

Bueno, ¡ya esta bien de teoría! vamos a comenzar con la practica, si queremos saber que sensores tenemos disponibles en nuestro teléfono, podemos utilizar el siguiente código:

 

Ejemplo para listar los Sensores disponibles Android

Para identificar los sensores que se encuentran en un dispositivo primero debe obtener una referencia al servicio del sensor. Para ello, se crea una instancia de la SensorManager clase llamando al getSystemService() método y pasando el SENSOR_SERVICE argumento. Por ejemplo:

// se crea una instancia de la SensorManager
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

//Creamos una lista con la informacion de los sensores disponibles
List sensores = mSensorManager.getSensorList(Sensor.TYPE_ALL);
						

El código de arriba no es necesario para usar nuestros sensores, es simplemente si queremos saber que sensores tenemos, al final y como veremos en la siguiente lección, veras como se accede a el sensor, y si este no existe o no lo tenemos en nuestro teléfono, simplemente no recibiremos los datos. Ahhh otra cosa mas! no necesitamos ningún permiso especial para usar los sensores ¿no te parece genial?.

Eclipse, Java, Android

Como ves en la siguiente imagen, tambien es posible ver otras propiedades de los sensores instalados en nuestro android como el fabricante del sensor, el rango maximo de este, asi como la resolucion del mismo y la velocidad de refresco minima con la que pasara los datos a nuestro programa. Hay otros parametros como el tipo y la version que no son demasiado significativos, aunque en mi caso (mi Nexus 5X) si os fijais en la informacion relativa al sensor de temperatura ambiente, que pone que esta en mi dispositivo, realmente no lo esta, y creo que el parametro "tipo" que tiene valor 65536 significa que no esta presente (el resto de tipos tiene un valor menor de 20).

Bueno, os dejo que hagais pruebas con esto, si quereis probar mi app que esta en google play con este ejemplo, podeis instalarosla desde aqui y ver como funcionan los sensores de vuestro Android asi como los sensores que dispone vuestro terminal.

APP: Sensores Android (en GooglePlay)

Bueno, creo que esta bien por ahora! en las siguientes lecciones me centrare en mas en como usar cada uno de los sensores, ya veras que es súper fácil! no es complicado, como todo requiere practica y hacer varias pruebas, pero vamos si yo pude. ¡tu también! animo y si no te aclaras, pregunta en el foro.

Si te a gustado este sitio, por favor haz click en me gusta en Facebook, Google+, Tweeter... es el único precio que te pido por este trabajo! ;P. Compartiendo, ayudaras a otros a encontrar esta web! GRACIASSSS.