Los Sensores Ambientales Android

Hola de nuevo chic@s! como vimos en la lección anterior, nuestro teléfono Android dispone de 3 grandes agrupaciones de sensores, aquí veremos los sensores ambientales. La plataforma Android proporciona cuatro sensores que le permiten controlar diversas propiedades ambientales. Podemos utilizar estos sensores para controlar la humedad relativa del ambiente, iluminación, la presión ambiental y la temperatura ambiente cerca de un dispositivo con Android. ¡¡empecemos!!

Eclipse, Java, Android

Normalmente los cuatro sensores Ambientales son basados en hardware y sólo están disponibles si el fabricante del dispositivo que ha incorporado en tu dispositivo, con la excepción del sensor de luz, que la mayoría de los fabricantes lo utilizan para controlar el brillo de la pantalla. Ten en cuenta que los sensores de medio ambiente no siempre están disponibles en los dispositivos, debido a esto, es muy importante que verifiques si existe un sensor de ambiente antes de intentar obtener datos de el.

Bueno, ya esta bien de cháchara! ya va siendo hora de ir viendo código y ejemplos prácticos de como usar estos sensores, ya veras que es muy muy fácil.

Activar los sensores Ambientales Android

Para comenzar a usar los sensores, necesitaremos primero acceder al servicio SensorManager para poder decirle que sensores queremos activar, para lo primero pondremos el siguiente código:

// Creamos el objeto para acceder al servicio de sensores
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
						

Para el segundo paso, cogemos el objeto que hemos creado mSensorManager y activamos los sensores que necesitemos, para ello tendremos que usar el siguiente código:

// iniciar sensores

		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE),
				SensorManager.SENSOR_DELAY_NORMAL);

		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
				SensorManager.SENSOR_DELAY_NORMAL);
				
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
				SensorManager.SENSOR_DELAY_NORMAL);		
				
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY),
				SensorManager.SENSOR_DELAY_NORMAL);		

						

Como ves, la cosa es fácil! es un código muy sencillo!! al objeto mSensorManager le decimos que queremos leer, y le pasamos 2 parámetros, por un lado el sensor que vamos a activar, y por otro la resolución o por decirlo de otra manera la velocidad con la que queremos leerlo, para por ejemplo en caso de los juegos que necesitamos una mayor respuesta (si por ejemplo requerimos conducir un coche) en el segundo parámetro pondremos SENSOR_DELAY_GAME lo malo o por contra tenemos que cuanto mas rápido consultamos el sensor, mas batería consume, así que a no ser que uses para algo que sepas lo que haces, usa el modo SENSOR_DELAY_NORMAL.

Eclipse, Java, Android

 

Ejemplo para capturar los datos de los sensores con SensorEvent Android

Ahora biene lo "complicado" que es capturar los eventos que lanzan los sensores que hemos activado, como veras no es complicado, otras lecciones que hemos visto me parecen mas complejas (como los mapas) si lo analizas con detenimiento veras que no es difícil, tienes el ejemplo completo en el apartado de ejemplos de esta unidad.

Nota: cuando ves el símbolo\n es que sumas una línea, es como meter un "Enter" en la cadena de texto, esto es muy útil, porque te permite organizar mejor los datos y no amontonarlos en una sola línea. ;P

// Metodo que escucha el cambio de los sensores
	@Override
	public void onSensorChanged(SensorEvent event) {
		String txt = "\n\nSensor: ";

		// Cada sensor puede lanzar un thread que pase por aqui
		// Para asegurarnos ante los accesos simult‡neos sincronizamos esto

		synchronized (this) {

			switch (event.sensor.getType()) {

			case Sensor.TYPE_LIGHT:
				txt += "Luminosidad\n";
				txt += "\n" + event.values[0] + " Lux";

				luminosidad.setText(txt);

				break;

			case Sensor.TYPE_PRESSURE:
				txt += "Presion\n";
				txt += "\n" + event.values[0] + " mBar \n\n";

				presion.setText(txt);

				break;

			case Sensor.TYPE_TEMPERATURE:
				txt += "Temperatura\n";
				txt += "\n" + event.values[0] + " ºC";

				temperatura.setText(txt);

				break;

			
			}
		}
	}

El código de arriba es muy bueno para comenzar a juguetear con los sensores, lo importante es que veas que hay un switch (event.sensor.getType()) que captura los sensores que nos interesa leer y que hemos activado, con el case Sensor.TYPE_xxxx lo que hacemos es poner el codigo especifico y que nos interese para cada sensor, que no es mas ni menos que leer el objeto SensorEvent, y tomar las decisiones o acciones que necesitemos hacer, "el tema" es saber que datos arroja cada sensor para saber recogerlos. Por ejemplo! veamos la siguiente tabla.

Eclipse, Java, Android

A diferencia de la mayoría de los sensores de movimiento y sensores de posición, que devuelven una matriz multidimensional de valores de los sensores para cada SensorEvent, los sensores ambientales devuelven un valor único de sensor para cada evento de datos. Por ejemplo, la temperatura en °C o la presión en hPa. Además. La tabla de arriba presenta un resumen de los sensores ambientales que se apoyan en la plataforma Android, puedes consultar la documentacion oficial aqui. Te recomiendo que te descargues el ejemplo completo aquí y juegues con el, ya veras que es muy fácil, divertido y curioso.

Ejemplo de como desactivar los sensores Ambientales en Android

Para desactivar los sensores es muy sencillo (recuerda hacerlo cuando salgas de la aplicación o dejes de usarlos, el uso de los sensores incrementa el consumo de batería) usa este código:

// Método para parar la escucha de los sensores

		mSensorManager.unregisterListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE));

		mSensorManager.unregisterListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT));

		mSensorManager.unregisterListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE));
				
		mSensorManager.unregisterListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY));		

						

Bueno, creo que esta bien por ahora! en la siguiente lección veremos los sensores Ambientales con algunos ejemplos de uso. Como digo siempre, 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.