The realization of "shake a Shake" function, in fact, is very simple, is to detect the mobile phone's gravity sensor, the specific implementation code as follows:
First, add the Operation permission in the Androidmanifest.xml
<uses-permission android:name= "Android.permission.VIBRATE"/>
Second, the implementation of the Code
Package com.xs.test; Import android.app.Activity; Import Android.hardware.Sensor; Import android.hardware.SensorEvent; Import Android.hardware.SensorEventListener; Import Android.hardware.SensorManager; Import Android.os.Bundle; Import Android.os.Handler; Import Android.os.Message; Import Android.os.Vibrator; Import Android.util.Log; Import Android.widget.Toast; Y {private Sensormanager Sensormanager; Private vibrator Vibrator; private static final String TAG = "testsensoractivity"; private static final int sensor_shake = 10; /** called when the activity is first created. */@Override public void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstance State); Setcontentview (R. Layout.main); Sensormanager = (Sensormanager) getsystemservice (Sensor_service); Vibrator = (Vibrator) getsystemservice (Vibrator_service); } @Override protected void Onresume () {super.onresume (); if (Sensormanager! = null) {//Register listener Sensormanager.registerlistener (Sensoreventlistener, sensormanager.ge Tdefaultsensor (Sensor.type_accelerometer), sensormanager.sensor_delay_normal); The first parameter is listener, the second parameter is the resulting sensor type, the third parameter value gets the frequency of the Sensor information}} @Override protected Voi D OnPause () {super.onpause (); if (Sensormanager! = null) {//Cancels listener Sensormanager.unregisterlistener (Sensoreventlistener); }}/** * Gravity sensing monitor */private Sensoreventlistener Sensoreventlistener = New Sensoreventlistener () {@Override public VOID onsensorchanged (Sensorevent event) {//sensor information changed when executing this method float[] values = event.values; float x = values[0]; The gravitational acceleration in the x-axis direction, right is positive float y = values[1]; The gravitational acceleration of the y-axis, forward is positive float z = values[2]; The gravitational acceleration of the z-axis, upward is the positive log.i (TAG, "The gravitational acceleration of the X-axis" + x + "; The gravitational acceleration of the y-axis" + y + "; z-axis direction of gravitational acceleration" + Z); Generally in these three directions the acceleration of gravity reached 40 to the state of shaking the phone. int medumvalue = 19;//Samsung i9250 No more than 20, no way, only set 19 if (Math.Abs (x) > Medumvalue | | Math.Abs (y) > Medumvalue | | Math.Abs (z) > Medumvalue) {vibrator.vibrate (200); Message msg = new Message (); Msg.what = Sensor_shake; Handler.sendmessage (msg); }} @Override public void onaccuracychanged (sensor sensor, int accuracy) { } }; /** * Action Execution */Handler Handler = new Handler () {@Override public void Han Dlemessage (Message msg) {super.handlemessage (msg); Switch (msg.what) {case SENSOR_SHAKE:Toast.makeText (testsensoractivity.this, "shake detected Shake, perform the operation! ", Toast.length_short). Show (); LOG.I (TAG, "shake detected, perform operation!") "); Break } } }; }
android--Shake a Shake