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