如何使用 Android 检测摇动事件?如何检测震动方向?
我想在发生晃动时更改 ImageView 中的图像。
从代码来看,需要实现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 震动检测监听器。
注意: SensorListener
已弃用。我们可以使用SensorEventListener来代替。 Here is a quick example using SensorEventListener.
谢谢。
我是一名优秀的程序员,十分优秀!