¿Cómo crear una aplicación para probar sensores de movimiento en Android?

En este artículo, construiremos un proyecto de aplicación de prueba de sensor de movimiento utilizando Java y XML en Android. La aplicación utilizará el hardware del dispositivo para detectar los movimientos. Los componentes necesarios para detectar el movimiento son Acelerómetro y Giroscopio . El acelerómetro es un sensor electrónico que se utiliza para detectar la posición del dispositivo en el espacio midiendo su aceleración y movimiento. Mientras que el giroscopio detecta el movimiento angular del dispositivo. En esta app observaremos un cambio en el color de la pantalla a medida que movemos el dispositivo. Habrá una sola actividad en esta aplicación. 

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: antes de ir a la sección de codificación, primero debe hacer una tarea previa

Agregue funciones en AndroidMainfest.xml: Necesitamos agregar el requisito de hardware que necesita esta aplicación. Los dos componentes que requerimos son giroscopio y acelerómetro. Agregue lo siguiente en su archivo  AndroidMainfest.xml .

<usos-función android:name=”android.hardware.sensor.accelerometer” android:required=”true”/>

<uses-feature android:name=”android.hardware.sensor.gyroscope” android:required=”true”/>

Cree dos clases de Java para Acelerómetro y Giroscopio y nombre la clase como Acelerómetro y Giroscopio .

Cambie el estilo a NoActionBar en el archivo themes.xml: 

<nombre de estilo=”AppTheme” parent=”Theme.AppCompat.NoActionBar”>

Paso 3: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo  activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GeeksforGeeks"
        android:textColor="#0F9D58"
        android:textSize="42dp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
  
</androidx.constraintlayout.widget.ConstraintLayout>

Paso 4: trabajar con el archivo Accelerometer.java

En el archivo Accelerometer.java , crearemos funciones para obtener las coordenadas del dispositivo en los ejes X, Y y Z. La función enviará los parámetros necesarios al sensor y obtendrá las coordenadas en el valor de retorno. Primero crearemos los objetos SensorManager , Sensor y SensorEventListener . Las variables SensorManager y Sensor nos permiten acceder a los sensores del dispositivo, mientras que SensorEventListener se llama cada vez que la posición del dispositivo cambia y los sensores están activados. A continuación se muestra el código para el archivo Accelerometer.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
  
public class Accelerometer {
  
    // create an interface with one method
    public interface Listener {
        // create method with all 3
        // axis translation as argument
        void onTranslation(float tx, float ty, float ts);
    }
  
    // create an instance
    private Listener listener;
  
    // method to set the instance
    public void setListener(Listener l) {
        listener = l;
    }
  
    private SensorManager sensorManager;
    private Sensor sensor;
    private SensorEventListener sensorEventListener;
  
    // create constructor with 
    // context as argument
    Accelerometer(Context context) {
        // create instance of sensor manager
        sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
          
        // create instance of sensor 
        // with type linear acceleration
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
          
        // create the sensor listener
        sensorEventListener = new SensorEventListener() {
            // this method is called when the
            // device's position changes
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {
                // check if listener is 
                // different from null
                if (listener != null) {
                    // pass the three floats in listener on translation of axis
                    listener.onTranslation(sensorEvent.values[0], sensorEvent.values[1], sensorEvent.values[2]);
                }
            }
  
            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {
  
            }
        };
    }
  
    // create register method 
    // for sensor notifications
    public void register() {
        // call sensor manger's register listener 
        // and pass the required arguments
        sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
  
    // create method to unregister
    // from sensor notifications
    public void unregister() {
        // call sensor manger's unregister listener
        // and pass the required arguments
        sensorManager.unregisterListener(sensorEventListener);
    }
}

Paso 4: trabajar con el archivo Gyroscope.java

En el archivo Gyroscope.java , todo será igual excepto que el sensor será de tipo giroscopio y no acelerómetro. Además, el oyente estará en rotación en lugar de traducción. A continuación se muestra el código para el archivo Gyroscope.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
  
public class Gyroscope {
  
    // create an interface with one method
    public interface Listener {
        // create method with all 3
        // axis translation as argument
        void onRotation(float tx, float ty, float ts);
    }
  
    // create an instance
    private Listener listener;
  
    // method to set the instance
    public void setListener(Listener l) {
        listener = l;
    }
  
    private SensorManager sensorManager;
    private Sensor sensor;
    private SensorEventListener sensorEventListener;
  
    // create constructor with context as argument
    Gyroscope(Context context) {
          
        // create instance of sensor manager
        sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  
        // create instance of sensor with type gyroscope
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
  
        // create the sensor listener
        sensorEventListener = new SensorEventListener() {
  
            // this method is called when
            // the device's position changes
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {
                // check if listener is different from null
                if (listener != null) {
                    // pass the three floats in listener on rotation of axis
                    listener.onRotation(sensorEvent.values[0], sensorEvent.values[1], sensorEvent.values[2]);
                }
            }
  
            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {
  
            }
        };
    }
  
    // create register method
    // for sensor notifications
    public void register() {
        // call sensor manger's register listener and pass the required arguments
        sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
  
    // create method to unregister
    // from sensor notifications
    public void unregister() {
        // call sensor manger's unregister listener
        // and pass the required arguments
        sensorManager.unregisterListener(sensorEventListener);
    }
}

Paso 5: trabajar con el archivo MainActivity.java

En el archivo MainActivity.java , crearemos funciones de escucha de ambas clases. Estableceremos el color de fondo de la pantalla en función de la rotación o el movimiento del dispositivo. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.graphics.Color;
import android.os.Bundle;
  
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
  
    // create variables of the two class
    private Accelerometer accelerometer;
    private Gyroscope gyroscope;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        // instantiate them with this as context
        accelerometer = new Accelerometer(this);
        gyroscope = new Gyroscope(this);
          
        // create a listener for accelerometer
        accelerometer.setListener(new Accelerometer.Listener() {
            //on translation method of accelerometer
            @Override
            public void onTranslation(float tx, float ty, float ts) {
                // set the color red if the device moves in positive x axis
                if (tx > 1.0f) {
                    getWindow().getDecorView().setBackgroundColor(Color.RED);
                }
                // set the color blue if the device moves in negative x axis
                else if (tx < -1.0f) {
                    getWindow().getDecorView().setBackgroundColor(Color.BLUE);
                }
            }
        });
  
        // create a listener for gyroscope
        gyroscope.setListener(new Gyroscope.Listener() {
            // on rotation method of gyroscope
            @Override
            public void onRotation(float rx, float ry, float rz) {
                // set the color green if the device rotates on positive z axis
                if (rz > 1.0f) {
                    getWindow().getDecorView().setBackgroundColor(Color.GREEN);
                }
                // set the color yellow if the device rotates on positive z axis
                else if (rz < -1.0f) {
                    getWindow().getDecorView().setBackgroundColor(Color.YELLOW);
                }
            }
        });
    }
  
    // create on resume method
    @Override
    protected void onResume() {
        super.onResume();
  
        // this will send notification to 
        // both the sensors to register
        accelerometer.register();
        gyroscope.register();
    }
  
    // create on pause method
    @Override
    protected void onPause() {
        super.onPause();
  
        // this will send notification in 
        // both the sensors to unregister
        accelerometer.unregister();
        gyroscope.unregister();
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por namanjha10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *