package com.limemobile.app.launcher.util; import android.hardware.SensorListener; import android.hardware.SensorManager; public abstract class ShakeSensorListener implements SensorListener { private double mTotalForcePrev; // stores the previous total force value public void onAccuracyChanged(int i, int j) { // ignore } public void onSensorChanged(int sensor, float[] values) { if (sensor == SensorManager.SENSOR_ACCELEROMETER) { double forceThreshHold = 1.5f; double totalForce = 0.0f; totalForce += Math.pow(values[SensorManager.DATA_X] / SensorManager.GRAVITY_EARTH, 2.0); totalForce += Math.pow(values[SensorManager.DATA_Y] / SensorManager.GRAVITY_EARTH, 2.0); totalForce += Math.pow(values[SensorManager.DATA_Z] / SensorManager.GRAVITY_EARTH, 2.0); totalForce = Math.sqrt(totalForce); if ((totalForce < forceThreshHold) && (mTotalForcePrev > forceThreshHold)) { onShake(); } mTotalForcePrev = totalForce; } } public abstract void onShake(); }