从代码的Angular 来看,您需要实现SensorListener:
public class ShakeActivity extends Activity implements SensorListener
您需要购买SensorManager:
sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
并用所需的标志注册此传感器:
sensorMgr.registerListener(this,
SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_GAME);
在onSensorChange()方法中,您可以确定它是否是摇晃:
public void onSensorChanged(int sensor, float[] values) {
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// only allow one update every 100ms.
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
x = values[SensorManager.DATA_X];
y = values[SensorManager.DATA_Y];
z = values[SensorManager.DATA_Z];
float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
Log.d("sensor", "shake detected w/ speed: " + speed);
Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
抖动阈值定义为:
private static final int SHAKE_THRESHOLD = 800;
还有一些其他的方法可以检测抖动.请看这个link.(如果该链接不工作或链接失效,则为look at this web archive).
看看这example个android shake detect listener.
Note: SensorListener
已被弃用.我们可以用SensorEventListener
代替.Here is a quick example using SensorEventListener.
谢谢.