Detect Shake In Android
I am trying to hit an API when user shake a device 10 times. I have tried many git sample and stack overflow solution but non of them did solve my problem. Some of them detecting s
Solution 1:
I have done that using this library :
1) Add the dependecy in your build.gridle file
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile'com.github.safetysystemtechnology:android-shake-detector:v1.2'
}
2) Give the permission to your app manifest file
<uses-featureandroid:name="android.hardware.sensor.accelerometer"android:required="true" />
if you will run in background, register your broadcast receiver
<receiverandroid:name=".ShakeReceiver"><intent-filter><actionandroid:name="shake.detector" /></intent-filter></receiver>
3) start that in onCreate method Like this :
privateShakeDetector shakeDetector;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buildView();
ShakeOptions options = newShakeOptions()
.background(true)
.interval(1000)
.shakeCount(2)
.sensibility(2.0f);
this.shakeDetector = newShakeDetector(options).start(this, newShakeCallback() {
@OverridepublicvoidonShake() {
Log.d("event", "onShake");
}
});
//IF YOU WANT JUST IN BACKGROUND//this.shakeDetector = new ShakeDetector(options).start(this);
}
4) override onStop method and stop that
@OverrideprotectedvoidonStop() {
super.onStop();
shakeDetector.stopShakeDetector(getBaseContext());
}
5) override onDistroy method and distroy like this :
@OverrideprotectedvoidonDestroy() {
shakeDetector.destroy(getBaseContext());
super.onDestroy();
}
(*) Optional step : if you will run in background, create your broadcast receiver
publicclassShakeReceiverextendsBroadcastReceiver {
@OverridepublicvoidonReceive(Context context, Intent intent) {
if (null != intent && intent.getAction().equals("shake.detector")) {
...
}
}
}
Solution 2:
By Using SensorListener
Please check this ticked answer...
You have to adjust SHAKE_THRESHOLD value to achieve this
How to detect shake event with android?
Thank you!
Solution 3:
have a static variable that gets incremented every time a shake is detected.
staticint count = 0;
publicvoidonSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
if ((curTime - mLastShakeTime) > MIN_TIME_BETWEEN_SHAKES_MILLISECS) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
double acceleration = Math.sqrt(Math.pow(x, 2) +
Math.pow(y, 2) +
Math.pow(z, 2)) - SensorManager.GRAVITY_EARTH;
if (acceleration > SHAKE_THRESHOLD) {
mLastShakeTime = curTime;
count++;
if(count==10){
//your code goes here
}
}
}
}
Post a Comment for "Detect Shake In Android"