package org.openintents.util; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; public abstract class ShakeSensorListener implements SensorEventListener { private double mTotalForcePrev; // stores the previous total force value @Override public void onAccuracyChanged(final Sensor sensor, final int accuracy) { //ignore } @Override public void onSensorChanged(final SensorEvent event) { int sensor = event.sensor.getType(); final float[] values = event.values; if (sensor == Sensor.TYPE_ACCELEROMETER) { double forceThreshHold = 1.5f; double totalForce = 0.0f; totalForce += Math.pow(values[0] / SensorManager.GRAVITY_EARTH, 2.0); totalForce += Math.pow(values[1] / SensorManager.GRAVITY_EARTH, 2.0); totalForce += Math.pow(values[2] / SensorManager.GRAVITY_EARTH, 2.0); totalForce = Math.sqrt(totalForce); if ((totalForce < forceThreshHold) && (mTotalForcePrev > forceThreshHold)) { onShake(); } mTotalForcePrev = totalForce; } } public abstract void onShake(); }