Created
April 15, 2022 09:39
-
-
Save massimilianochiodi/44c6ed83caeb5c765f06bf1170e34cae to your computer and use it in GitHub Desktop.
Shake listener (java)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ShakeListener implements SensorEventListener { | |
private static final float SHAKE_THRESHOLD_GRAVITY = 2.7F; | |
private static final int SHAKE_SLOP_TIME_MS = 500; | |
private static final int SHAKE_COUNT_RESET_TIME_MS = 3000; | |
private OnShakeListener mListener; | |
private long mShakeTimestamp; | |
private int mShakeCount; | |
public void setOnShakeListener(OnShakeListener listener) { | |
this.mListener = listener; | |
} | |
public interface OnShakeListener { | |
public void onShake(int count); | |
} | |
@Override | |
public void onAccuracyChanged(Sensor sensor, int accuracy) { | |
// ignore | |
} | |
@Override | |
public void onSensorChanged(SensorEvent event) { | |
if (mListener != null) { | |
float x = event.values[0]; | |
float y = event.values[1]; | |
float z = event.values[2]; | |
float gX = x / SensorManager.GRAVITY_EARTH; | |
float gY = y / SensorManager.GRAVITY_EARTH; | |
float gZ = z / SensorManager.GRAVITY_EARTH; | |
// gForce will be close to 1 when there is no movement. | |
float gForce = (float)Math.sqrt(gX * gX + gY * gY + gZ * gZ); | |
if (gForce > SHAKE_THRESHOLD_GRAVITY) { | |
final long now = System.currentTimeMillis(); | |
// ignore shake events too close to each other (500ms) | |
if (mShakeTimestamp + SHAKE_SLOP_TIME_MS > now) { | |
return; | |
} | |
// reset the shake count after 3 seconds of no shakes | |
if (mShakeTimestamp + SHAKE_COUNT_RESET_TIME_MS < now) { | |
mShakeCount = 0; | |
} | |
mShakeTimestamp = now; | |
mShakeCount++; | |
mListener.onShake(mShakeCount); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment