Los sensores de acelerómetro en los dispositivos Android se utilizan para detectar la orientación del dispositivo. Esto ayuda a que la aplicación cambie la orientación cuando se inclina cuando se configura para girar automáticamente. Además, múltiples aplicaciones utilizan datos de sensores de acelerómetro para realizar diversas acciones. Por ejemplo, se puede usar un batido para pausar la reproducción de un video en el dispositivo. Entonces, en este artículo, le mostraremos cómo puede detectar movimientos de vibración en Android. Siga los pasos a continuación una vez que el IDE esté listo.
Implementación paso a paso
Paso 1: crea un nuevo proyecto en Android Studio
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Demostramos la aplicación en Kotlin , así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.
Paso 2: 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 . No se requieren cambios en este archivo, así que manténgalo intacto.
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:id="@+id/text_view_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" 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 3: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
package org.geeksforgeeks.detectphysicalshake import android.content.Context import android.hardware.Sensor import android.hardware.SensorEvent import android.hardware.SensorEventListener import android.hardware.SensorManager import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import java.util.* import kotlin.math.sqrt class MainActivity : AppCompatActivity() { // Declaring sensorManager // and acceleration constants private var sensorManager: SensorManager? = null private var acceleration = 0f private var currentAcceleration = 0f private var lastAcceleration = 0f override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Getting the Sensor Manager instance sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager Objects.requireNonNull(sensorManager)!! .registerListener(sensorListener, sensorManager!! .getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL) acceleration = 10f currentAcceleration = SensorManager.GRAVITY_EARTH lastAcceleration = SensorManager.GRAVITY_EARTH } private val sensorListener: SensorEventListener = object : SensorEventListener { override fun onSensorChanged(event: SensorEvent) { // Fetching x,y,z values val x = event.values[0] val y = event.values[1] val z = event.values[2] lastAcceleration = currentAcceleration // Getting current accelerations // with the help of fetched x,y,z values currentAcceleration = sqrt((x * x + y * y + z * z).toDouble()).toFloat() val delta: Float = currentAcceleration - lastAcceleration acceleration = acceleration * 0.9f + delta // Display a Toast message if // acceleration value is over 12 if (acceleration > 12) { Toast.makeText(applicationContext, "Shake event detected", Toast.LENGTH_SHORT).show() } } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {} } override fun onResume() { sensorManager?.registerListener(sensorListener, sensorManager!!.getDefaultSensor( Sensor .TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL ) super.onResume() } override fun onPause() { sensorManager!!.unregisterListener(sensorListener) super.onPause() } }
Producción:
Puede observar que cuando agita el dispositivo, se muestra un brindis.
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA