Detección de movimientos repentinos hacia arriba en Android

Estoy tratando de detectar un movimiento ascendente en mi dispositivo Android, pero estoy encontrando esto bastante difícil. He escrito el siguiente código, y funciona para todos los movimientos repentinos (es decir aceleración rápida) en todas las direcciones. Sin embargo, quisiera que esto trabajara solamente para un movimiento ascendente repentino. Cualquier ayuda es muy apreciada.

public void onSensorChanged(SensorEvent event) { // alpha is calculated as t / (t + dT) // with t, the low-pass filter's time-constant // and dT, the event delivery rate final float alpha = 0.8f; gravity = new float[3]; linear_acceleration = new float[3]; linear_acceleration_old = new float[3]; gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; linear_acceleration[0] = event.values[0] - gravity[0]; linear_acceleration[1] = event.values[1] - gravity[1]; linear_acceleration[2] = event.values[2] - gravity[2]; System.out.println(linear_acceleration[0] + " " + linear_acceleration[1]+" " +linear_acceleration[2]); //detects swift movements, but I want to detect only upward ones if((Math.abs(linear_acceleration[1] - linear_acceleration_old[1]) > 10.0f && Math.abs(linear_acceleration[2] - linear_acceleration_old[2]) > 5.0f) || isFirstEvent) { if(!isFirstEvent) //do something linear_acceleration_old[0] = linear_acceleration[0]; linear_acceleration_old[1] = linear_acceleration[1]; linear_acceleration_old[2] = linear_acceleration[2]; isFirstEvent= false; } } 

No estoy muy seguro de lo que quería decir con "hacia arriba", sin embargo:

  1. Dejando el teléfono descansar sobre la superficie de la mesa y levantarlo (hacerlo más alto que la mesa), sería un cambio en el eje Z.

  2. Sosteniendo verticalmente el teléfono como si estuviera hablando y luego tirando de él (levántelo más alto), sería un cambio en el eje Y.

Si está interesado en detectar estos movimientos, debe modificar su código para calcular los deltas sólo en el eje correspondiente.

No debe operar sólo en los sensores de acelerómetro x, y, z, sino también tener en cuenta los sensores de orientación: SensorManager.getOrientation

De esta manera usted puede asegurar la dirección "hacia arriba".

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.