¿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");