Red de conocimiento informático - Conocimiento informático - ¿Cómo manejar el sensor de aceleración en Android?

¿Cómo manejar el sensor de aceleración en Android?

En la actualidad, muchas aplicaciones han implementado la función de vibración. Aquí revisamos el uso de sensores de aceleración explicando el principio y la implementación de esta función:

1. el administrador de sensores

sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE

2. Obtenga el sensor de aceleración a través del administrador de sensores

accelerateSensor = getSensorManager(context) .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

3. Registre el oyente del sensor de aceleración

sensorManager.registerListener(oyente, sensor, velocidad)

Descripción del parámetro:

escucha: instancia de escucha del sensor de aceleración

sensor: instancia del sensor de aceleración AccelerateSensor se utiliza para implementar la vibración

tasa: velocidad de respuesta del sensor. , con cuatro constantes para elegir

SENSOR_DELAY_NORMAL: coincide con los cambios en la orientación de la pantalla, velocidad predeterminada del sensor

SENSOR_DELAY_UI: coincide con la interfaz de usuario

Si actualiza la interfaz de usuario, se recomienda utilizar SENSOR_DELAY_GAME:

Para juegos de combinación, se recomienda utilizar SENSOR_DELAY_FASTEST para el desarrollo de juegos: se puede lograr la combinación más rápida

Elija según la situación, generalmente elija. el primero

Oyente de sensor: SensorEventListener tiene dos métodos de devolución de llamada

onSensorChanged(evento de sensorEvent) y onAccuracyChanged(sensor de sensor, precisión int)

El primero es el método correspondiente para cambios de valor del sensor

El segundo es el método correspondiente para responder a cambios de velocidad

Ambos métodos se llamarán al mismo tiempo

onSensorChanged( SensorEvent event) introducción

nSensorChanged(SensorEvent event)

La variable de valores de la instancia del evento es muy importante. Dependiendo del sensor, los valores internos tienen diferentes significados. Tome el sensor de aceleración como ejemplo:

valores El tipo de esta variable es una matriz float[], con hasta tres elementos:

float x = valores[0] representa el Eje X

float y = valores[1] representa el eje Y

float z = valores[2] representa el eje Y

La dirección de la X El eje es de izquierda a derecha a lo largo de la dirección horizontal de la pantalla. Si el teléfono no es cuadrado, el lado más corto debe colocarse horizontalmente y el lado más largo verticalmente. La dirección del eje Y es desde la esquina inferior izquierda de la pantalla hasta la parte superior de la pantalla a lo largo de la dirección vertical de la pantalla. Coloque el teléfono sobre la mesa, con el eje Z apuntando desde el teléfono hacia el cielo.

Determinamos si el teléfono se sacude. Siempre que los ejes x, y y z alcancen el umbral establecido, significa vibración.

@Override

public void onSensorChanged(Evento SensorEvent) {

int sensorType = event.sensor.getType();

/ /valores[0]: Eje X, valores[1]: Eje Y, valores[2]: Eje Z

float[] valores = evento.valores

float; x = valores[0];

float y = valores[1];

float z = valores[2]; "x :" x "y:" y "z: " z

Log.i(TAG, "Math.abs(x):" Math.abs(x) "Math.abs( y) :" Math.abs(y) "Math.abs(z):" Math.abs(z));

if(sensorType == Sensor.TYPE_ACCELEROMETER){

int value = 15; // Umbral de vibración, el valor máximo que pueden alcanzar diferentes teléfonos móviles es diferente, por ejemplo, una determinada marca de teléfono móvil solo puede alcanzar 20

if(x gt;= value || x lt;= - valor || y gt;= valor || y lt;= -valor || z gt;= valor || (TAG, "Vibración detectada ");

//Reproduce animación, actualiza la interfaz y realiza las operaciones comerciales correspondientes

}

}

Hace mucho tiempo escribí:

Para mejorar la solidez del programa, es necesario determinar y evitar que el evento de vibración se active varias veces al mismo tiempo:

flotar[] valores = evento.valores;

flotar x = valores[0]

flotar y = valores[1]; p>float z = valores[2];

Log.i(TAG, "onSensorChanged:" "x: "x", y: "y", z: "z");

si (x gt; = 15 || x lt; = -15 || y gt;= 15 || y lt;= -15 || z gt;= 15 || z lt;= -15) {

if (allowShake()) {// Determinar si se agita repetidamente

Log.e(TAG, "Shake, shake"); AllowShake().start();

} más {

Log.e(TAG, "Se permite agitar nuevamente después de 2 s");