android搖一搖功能是通過手機中的加速度傳感器實現的。當加速度大於某一值時,我們認爲手機發生搖動,進而進行更多的處理。
功能實現主要有以下幾個步驟:
1.添加權限
<!--重力加速度傳感器權限 --> <uses-permission android:name="android.hardware.sensor.accelerometer"/>
2.獲取傳感器管理器
SensorManager manager = (SensorManager) this.getSystemService(Service.SENSOR_SERVICE);
3.編寫傳感器監聽器,繼承SensorEventListener,其中Sensor.TYPE_ACCELEROMETER爲加速度傳感器的類型,17是晃動的幅度,有些手機怎麼晃動都很難超過20
public class MySensorEventListener implements SensorEventListener { @Override public void onSensorChanged(SensorEvent event) { //獲取傳感器類型 int sensorType = event.sensor.getType(); //values[0]:X軸,values[1]:Y軸,values[2]:Z軸 float[] values = event.values; //如果傳感器類型爲加速度傳感器,則判斷是否爲搖一搖 if(sensorType == Sensor.TYPE_ACCELEROMETER){ if ((Math.abs(values[0]) > 17 || Math.abs(values[1]) > 17 || Math .abs(values[2]) > 17)) { Log.d("sensor x ", "============ values[0] = " + values[0]); Log.d("sensor y ", "============ values[1] = " + values[1]); Log.d("sensor z ", "============ values[2] = " + values[2]); //在這裏編寫功能代碼。。。 } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }
4.註冊監聽器
listener = new MySensorEventListener(this);manager.registerListener(listener, manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
以上便是實現搖一搖功能的主要步驟,demo源碼地址https://github.com/Sunnick/Shake,有興趣的童鞋可以下載。
以上如有不當之處,歡迎指正,謝謝。