我终于想出了如何在Android中实现加速度计,但似乎是在跳帧。我怀疑这是因为当我使用这样的加速度数据时:
velX += event.values[0]*(deltaTime/1000);
velY += event.values[1]*(deltaTime/1000);
velZ += event.values[2]*(deltaTime/1000);
将以m / s为单位的加速度转换为以m /(帧的时间)为单位的速度。这似乎表现得很好,除了一些意外的行为。例如,使用velY,如果我向上移动手机并停止,则velY会变得非常大。看来,减速比加速更多。
然后我计算了FPS,看看我是否真的得到了最小的传感器延迟,就像我用sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);
我还在Google Play商店中测试了一个名为Accelerometer Analyzer
的应用,发现它的速度达到了260 FPS,而我的应用每秒调用onSensorChanged()
次约为130次。这甚至发生在我清空方法并用FPS计数器替换它时。
在快速向上移动设备然后停止时,您可以在此速度图表片段中看到此效果。
不知何故,速度变为负面。
希望有人知道这个问题。
编辑:我想确认我使用的是Sensor.TYPE_LINEAR_ACCELERATION
而不是Sensor.TYPE_ACCELEROMETER