INTRODUCCIÓN AL MARCO DE SENSORES DE ANDROID
Los sensores son los dispositivos de entrada más novedosos que incorpora Android y con ellos podremos implementar formas atractivas de interacción con el usuario.
Android ofrece soporte para sensores de hardware entre estos están las siguientes clases e interfaces:
●SensorManager
●Sensor
●SensorEventListener
●SensorEvent
Si su aplicación utiliza sensores, puede poseer cualquiera de las siguientes dos opciones:
●Specify the sensor in the Android Manifest
●Check for the sensor at runtime
Para que su aplicación utilice un sensor, agregale la declaración <uses-feature> en el Android Manifest por ejemplo:
<uses-feature android:name="android.hardware.sensor.compass"android:required="true"/>
Si desea que su aplicación utilice la brújula, pero no requiere que funcione, debe establecer Android: required = "false"de lo contrario la aplicación no estará disponible en la Google Play.
Los sensores se agrupan en tres categorías:
●Sensores de movimiento
●Sensores ambientales
●Sensores de posición
Tipos de Sensores soportados en la plataforma Android:
SENSORES | DETECTAN | USO |
---|---|---|
TYPE_ACCELEROMETER | Detección de movimiento incluyendo gravedad | Se utiliza para determinar shake, tilt,etc. |
TYPE_AMBIENT_TEMPERATURE | Mide la habitación ambiente temperatura | Se utiliza para determinar las temperatura |
TYPE_GRAVITY | Mide la fuerza de la gravedad en los tres ejes | Utilizado para la detección de movimiento |
TYPE_GYROSCOPE | Mide la rotación en los tres ejes | Se utiliza para determinar giro en giro. |
TYPE_LIGHT | Mide el nivel de luz | Se utiliza para configurar la pantalla brillo |
TYPE_LINEAR_ACCELERATION | Detección de movimiento excluyendo gravedad | Se utiliza para determinar la aceleración |
TYPE_MAGNETIC_FIELD | Mide el campo geomagnético | Se utiliza para crear una brújula o determinar el cojinete |
TYPE_PRESSURE | Asegura la presión del aire | Utilizado para barómetro |
TYPE_PROXIMITY | Mide el objeto relativo a lapantalla | Se utiliza para determinar si el Dispositivo se mantiene en contra de la durante una llamada telefónica |
TYPE_RELATIVE_HUMIDITY | Mide la humedad relativa | Se utiliza para determinar el punto de rocío y humedad |
TYPE_ROTATION_VECTOR | Mide la orientación del dispositivo | Se utiliza para detectar movimiento y rotación |
Existen dos sensores adicionales TYPE_ORIENTATION y TYPE_TEMPERATURE los cuales han sido reemplazados por nuevos sensores.
Actividad:
Para esta actividad haremos la demostración de recuperación de una lista de sensores disponibles observen la siguiente imagen:Empezemos
Cree un nuevo proyecto en Android Studio y asígnele el nombre ListDeviceSensors. Para realizar la comprobación de esta actividad puedes hacer uso de tu teléfono celular, tablet o emulador desde su computadora.
En primer lugar, consultaremos la lista de sensores disponibles, luego mostraremos los resultados en un ListView.
A continuación siga los pasos detallados a seguir:
1.Nos dirigimos al archivo activity_main.xml y reemplazamos el <TextView> que se genera automáticamente al crear el proyecto por el siguiente método:
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.Ahora nos dirigimos abrie el MainActivity.java agregaremos las siguientes líneas de código al método onCreate() que ya existe:
ListViewlistView= (ListView)findViewById(R.id.list);
ListsensorList=newArrayList<String>();
List<Sensor>sensors= ((SensorManager) getSystemService(
Context.SENSOR_SERVICE)).getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor :sensors) {
sensorList.add(sensor.getName()); }
ListAdaptersensorAdapter=newArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,sensorList);
listView.setAdapter(sensorAdapter);}
3.Ahora comprobaremos la aplicación en nuestro dispositivo o emulador:
Como se hace: La siguiente línea de código es responsable de obtener la lista de sensores disponibles:
List<Sensor>sensors= ((SensorManager) getSystemService Context.SENSOR_SERVICE)).getSensorList(Sensor.TYPE_ALL).
Ahora podemos observar que recuperamos una lista de objetos Sensor. En este ejemplo sólo obtenemos el nombre del sensor para mostrar enel ListView, pero existen otras propiedades disponibles como la sección para una lista completa.
Además podemos observar en la imagen que un dispositivo puede tener múltiples sensores del mismo tipo si está buscando un sensor en específico, puede llamarlo con uno de las Constantes de la tabla que se muestra anteriormente.
Para este caso, veremos el sensores del acelerómetro disponibles llamando el siguiente método:List<Sensor>sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
Si no estámos buscando una lista de sensores, pero necesitamos trabajar con un sensor específico, podemos comprobar si hay un sensor predeterminado usando este código:
if(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) !=
null){
//Sensor is available - do something here