- Import Android.content.Context;
- Import Android.hardware.Sensor;
- Import android.hardware.SensorEvent;
- Import Android.hardware.SensorEventListener;
- Import Android.hardware.SensorManager;
- /**
- *
- * A monitor that detects phone shake
- * @author Fuzhengchao
- *
- */
- Public class Shakelistener implements Sensoreventlistener {
- //Speed threshold, which acts when the shaking speed reaches this value
- private static final int speed_shreshold = 4000;
- //Two time interval of detection
- private static final int uptate_interval_time = 70;
- //Sensor manager
- private Sensormanager Sensormanager;
- //Sensor
- private sensor sensor;
- //Gravity sensor listener
- private Onshakelistener Onshakelistener;
- //Context
- private context context;
- //Cell phone position when the gravity sensor coordinates
- private float lastx;
- private float lasty;
- private float Lastz;
- //Last detection time
- private long lastupdatetime;
- //Builder
- Public Shakelistener (Context c) {
- //Get Listener Object
- context = C;
- Start ();
- }
- //Start
- public void Start () {
- //Get the Sensor manager
- Sensormanager = (Sensormanager) context.getsystemservice (Context.sensor_service);
- if (sensormanager! = null) {
- //Get gravity sensor
- Sensor = Sensormanager.getdefaultsensor (Sensor.type_accelerometer);
- }
- //Registration
- if (sensor! = null) {
- Sensormanager.registerlistener (this, sensor, sensormanager.sensor_delay_game);
- }
- }
- //Stop detection
- public void Stop () {
- Sensormanager.unregisterlistener (this);
- }
- //Shake Monitoring interface
- Public interface Onshakelistener {
- public void Onshake ();
- }
- //Set Gravity Sensor listener
- public void Setonshakelistener (Onshakelistener listener) {
- Onshakelistener = listener;
- }
- //gravity sensor sensing for change data
- public void Onsensorchanged (Sensorevent event) {
- //Current detection time
- Long currentupdatetime = System.currenttimemillis ();
- //Two time interval of detection
- long timeinterval = Currentupdatetime-lastupdatetime;
- //Determine if the detection interval is reached
- if (TimeInterval < uptate_interval_time)
- return;
- //The time now becomes last time
- LastUpdateTime = Currentupdatetime;
- //Get x, y, Z coordinates
- float x = event.values[0];
- float y = event.values[1];
- float z = event.values[2];
- //Get change values for x, Y, z
- float deltax = x-lastx;
- float deltay = y-lasty;
- float Deltaz = Z-lastz;
- //Turn the current coordinates into the last coordinates
- LASTX = x;
- Lasty = y;
- Lastz = Z;
- Double speed = math.sqrt (deltax*deltax + deltay*deltay + Deltaz*deltaz)/timeinterval * 10000;
- //To reach the speed threshold, send a hint
- if (speed >= speed_shreshold)
- Onshakelistener.onshake ();
- }
- public void onaccuracychanged (sensor sensor, int accuracy) {
- }
- }
Usage:
Java Code
- Shakelistener Shakelistener = new Shakelistener (this); Create an object
- Shakelistener.setonshakelistener (new Onshakelistener () {//Call Setonshakelistener method for listening
- Public void Onshake () {
- //The handling of the mobile phone after shaking (such as changing songs, changing pictures, shaking ...) )
- //onvibrator ();
- }
- });
Vibration
Java Code
- Private void Onvibrator () {
- Vibrator Vibrator = (Vibrator) context.getsystemservice (Context.vibrator_service);
- if (vibrator = = null) {
- Vibrator Localvibrator = (vibrator) Context.getapplicationcontext ()
- . Getsystemservice ("Vibrator");
- Vibrator = Localvibrator;
- }
- Vibrator.vibrate (100L);
- }
Shake a thin Code implementation
Http://blog.sina.com.cn/s/blog_66cfbaa5010120w8.html
Android similar to Qihoo 360 mobile phone in the guardian of the shaking effect achieved
http://blog.csdn.net/nono_love_lilith/article/details/7554341
Monitor phone shake (shake) Sensoreventlistener