我正在尝试将一些功能与“摇晃”事件联系起来。我在这里使用了教程:
http://www.vogella.com/articles/AndroidSensor/article.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
我正在使用 OpenIntents 的SensorSimulator进行测试。我能够将模拟器连接到 SensorSimulator。当我在模拟器中移动设备时,模拟器上的加速度计读数完全反映了模拟器的读数。
在我的代码中,我添加了一些日志语句,例如:
public class ShakeEventListener implements SensorEventListener {
private void getAccelerometer(SensorEvent event) {
float[] values = event.values;
// Movement
float x = values[0];
float y = values[1];
float z = values[2];
float accelationSquareRoot = (x * x + y * y + z * z)
/ (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
long actualTime = System.currentTimeMillis();
Log.i("onSensorChanged", "accelationSquareRoot: " + accelationSquareRoot);
if (accelationSquareRoot >= 2) //
{
if (actualTime - lastUpdate < 200) {
return;
}
lastUpdate = actualTime;
// Shake Detected
Log.i("onSensorChanged", "Shakie Shakie!");
}
}
public void onSensorChanged(SensorEvent se) {
Log.d("onSensorChanged", "X: " + se.values[SensorManager.DATA_X] +
" Y: " + se.values[SensorManager.DATA_Y] +
" Z: " + se.values[SensorManager.DATA_Z]);
if (se.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
getAccelerometer(se);
}
}
}
如果我在模拟器中移动设备,log cat 中的输出似乎没有改变。它总是显示这些读数(读数每分钟都会更新很多次,但它们总是一样的):
05-22 15:09:07.717: I/onSensorChanged(686): accelationSquareRoot: 1.0006835
05-22 15:09:08.518: D/onSensorChanged(686): X: 0.0 Y: 9.77622 Z: 0.813417
05-22 15:09:08.518: I/onSensorChanged(686): accelationSquareRoot: 1.0006835
我尝试了APIDemos
示例sensors.java
,但这也注册了相同的行为。我会错过什么?