in app when user walks want calculate shaking(vibration) of mobile. how calculate shaking of mobile , how show output.
here code making mobile vibrated when shaked....
final vibrator vibe = (vibrator)getsystemservice(context.vibrator_service); mshaker = new shakelistener(this); mshaker.setonshakelistener(new shakelistener.onshakelistener () { public void onshake() { vibe.vibrate(100); system.out.println("shake listener called"); noofshakes++; } }); public class shakelistener implements sensoreventlistener { private static final int force_threshold = 300; private static final int time_threshold = 100; private static final int shake_timeout = 500; private static final int shake_duration = 1000; private static final int shake_count = 3; private sensormanager msensormgr; private float mlastx=-1.0f, mlasty=-1.0f, mlastz=-1.0f; private long mlasttime; private onshakelistener mshakelistener; private context mcontext; private int mshakecount = 0; private long mlastshake; private long mlastforce; public interface onshakelistener { public void onshake(); } public shakelistener(context context) { mcontext = context; resume(); } public void setonshakelistener(onshakelistener listener) { mshakelistener = listener; } public void resume() { msensormgr = (sensormanager)mcontext.getsystemservice(context.sensor_service); if (msensormgr == null) { throw new unsupportedoperationexception("sensors not supported"); } boolean supported = false; try { supported = msensormgr.registerlistener(this, msensormgr.getdefaultsensor(sensor.type_accelerometer), sensormanager.sensor_delay_game); } catch (exception e) { toast.maketext(mcontext, "shaking not supported", toast.length_long).show(); } if ((!supported)&&(msensormgr != null)) msensormgr.unregisterlistener(this); } public void pause() { if (msensormgr != null) { msensormgr.unregisterlistener(this); msensormgr = null; } } public void onaccuracychanged(sensor sensor, int accuracy) { } public void onsensorchanged(sensorevent event) { if (event.sensor.gettype() != sensor.type_accelerometer) return; long = system.currenttimemillis(); if ((now - mlastforce) > shake_timeout) { mshakecount = 0; } if ((now - mlasttime) > time_threshold) { long diff = - mlasttime; float speed = math.abs(event.values[sensormanager.data_x] + event.values[sensormanager.data_y] + event.values[sensormanager.data_z] - mlastx - mlasty - mlastz) / diff * 10000; system.out.println("speed of vibration "+speed); if (speed > force_threshold) { if ((++mshakecount >= shake_count) && (now - mlastshake > shake_duration)) { mlastshake = now; mshakecount = 0; if (mshakelistener != null) { mshakelistener.onshake(); } } mlastforce = now; } mlasttime = now; mlastx = event.values[sensormanager.data_x]; mlasty = event.values[sensormanager.data_y]; mlastz = event.values[sensormanager.data_z]; } } }
we have add following line in manifest file
<uses-permission android:name="android.permission.shake" /> <uses-permission android:name="android.permission.vibrate" />
Comments
Post a Comment