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!!
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.
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 Listsensores = 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?.
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.