Android - Sensores

La mayoría de los dispositivos Android tienen sensores integrados que miden el movimiento, la orientación y diversas condiciones ambientales. La plataforma Android admite tres amplias categorías de sensores.

  • Sensores de movimiento
  • Sensores ambientales
  • Sensores de posición

Algunos de los sensores están basados ​​en hardware y algunos son sensores basados ​​en software. Cualquiera que sea el sensor, Android nos permite obtener los datos sin procesar de estos sensores y usarlos en nuestra aplicación. Para este androide nos proporciona algunas clases.

Android proporciona las clases SensorManager y Sensor para usar los sensores en nuestra aplicación. Para utilizar sensores, lo primero que debe hacer es crear una instancia del objeto de la clase SensorManager. Se puede lograr de la siguiente manera.

SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);

Lo siguiente que debe hacer es crear una instancia del objeto de la clase Sensor llamando al método getDefaultSensor () de la clase SensorManager. Su sintaxis se da a continuación:

Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);

Una vez que se declara ese sensor, debe registrar su oyente y anular dos métodos que son onAccuracyChanged y onSensorChanged. Su sintaxis es la siguiente:

sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

public void onSensorChanged(SensorEvent event) {
}

Obtener lista de sensores compatibles

Puede obtener una lista de sensores compatibles con su dispositivo llamando al método getSensorList, que devolverá una lista de sensores que contiene su nombre y número de versión y mucha más información. Luego, puede iterar la lista para obtener la información. Su sintaxis se da a continuación:

sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}

Aparte de estos métodos, existen otros métodos proporcionados por la clase SensorManager para administrar el marco de sensores. Estos métodos se enumeran a continuación:

No Señor Método y descripción
1

getDefaultSensor(int type)

Este método obtiene el sensor predeterminado para un tipo determinado.

2

getInclination(float[] I)

Este método calcula el ángulo de inclinación geomagnético en radianes a partir de la matriz de inclinación.

3

registerListener(SensorListener listener, int sensors, int rate)

Este método registra un oyente para el sensor

4

unregisterListener(SensorEventListener listener, Sensor sensor)

Este método anula el registro de un oyente para los sensores con los que está registrado.

5

getOrientation(float[] R, float[] values)

Este método calcula la orientación del dispositivo basándose en la matriz de rotación.

6

getAltitude(float p0, float p)

Este método calcula la altitud en metros a partir de la presión atmosférica y la presión al nivel del mar.

Ejemplo

Aquí hay un ejemplo que demuestra el uso de la clase SensorManager. Crea una aplicación básica que le permite ver la lista de sensores en su dispositivo.

Para experimentar con este ejemplo, puede ejecutarlo en un dispositivo real o en un emulador.

Pasos Descripción
1 Utilizará Android Studio para crear una aplicación de Android en un paquete com.example.sairamkrishna.myapplication.
2 Modifique el archivo src / MainActivity.java para agregar el código necesario.
3 Modifique res / layout / activity_main para agregar los componentes XML respectivos.
4 Ejecute la aplicación y elija un dispositivo Android en ejecución e instale la aplicación en él y verifique los resultados.

A continuación se muestra el contenido de la modificación MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;

import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.TextView;

import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorManager;

public class MainActivity extends Activity {
   TextView tv1=null;
   private SensorManager mSensorManager;
   @Override
   
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      tv1 = (TextView) findViewById(R.id.textView2);
      tv1.setVisibility(View.GONE);
      
      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
      List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);
      
      for (int i = 1; i < mList.size(); i++) {
         tv1.setVisibility(View.VISIBLE);
         tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion());
      }
   }
	
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

A continuación se muestra el contenido modificado del xml activity_main.xml.

En el siguiente código abc indica sobre el logo de tutorialspoint.com
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView android:text="Sensor " android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:theme="@style/Base.TextAppearance.AppCompat" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="New Text"
      android:id="@+id/textView2"
      android:layout_below="@+id/imageView"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />

</RelativeLayout>

A continuación se muestra el contenido de la res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

A continuación se muestra el contenido de AndroidManifest.xml archivo.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Intentemos ejecutar nuestra aplicación que acabamos de modificar. Supongo que habías creado tuAVDmientras realiza la configuración del entorno. Para ejecutar la aplicación desde Android Studio, abra uno de los archivos de actividad de su proyecto y haga clic en el icono Ejecutar de la barra de herramientas. Android Studio instala la aplicación en su AVD y la inicia y, si todo está bien con su configuración y aplicación, se mostrará la siguiente ventana del emulador:

Ahora, si miras la pantalla de tu dispositivo, verás la lista de sensores compatibles con tu dispositivo junto con su nombre y versión y otra información.

Si ejecuta esta aplicación en diferentes dispositivos, la salida sería diferente porque la salida depende de la cantidad de sensores compatibles con su dispositivo.