2

所以我正在编写一个检测运动的应用程序,需要针对各种运动进行校准。在过去的几天里,我注意到在 aSensorEventListener注册之后,onSensorChanged(SensorEvent)会抛出不完整的(因此是错误的).values[]。这种行为搞砸了我的校准过程,并且表示运动的力量太大了。我已经验证我下载和测试的每个加速度计记录应用程序都是这种情况,所以它不是我的代码特有的错误。我认为这可能是由坏硬件(可能特定于我的 moto droid 1)或我正在使用的自定义 ROM 的软件错误引起的(Simply Stunning 4.9,来自 Froyo 2.2.1 源。)

例子:

sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SENSOR_DELAY);
....
onSensorChanged(SensorEvent event){
    // event.values[0] = 0.0
    // event.values[1] = -0.47
    // event.values[2] = 0.0
}
....
onSensorChanged(SensorEvent event){
    // event.values[0] = 0.08
    // event.values[1] = -0.47
    // event.values[2] = 0.0
}
....
onSensorChanged(SensorEvent event){
   // event.values[0] = 0.08 
   // event.values[1] = -0.47 
   // event.values[2] = 10.1
}

如您所见,通常需要读取 2 个读数才能访问所有正确值。

任何人都可以在 moto droid 1 或其他手机上确认或否认这种行为吗?您认为一个好的解决方案是只删除前 2 或 3 个读数,以免它们扭曲我的校准吗?

4

1 回答 1

2

对我来说听起来很合理。也许您可以首先使用 FASTEST 延迟注册您的听众,这样您就可以快速消除这些不良读数,然后以您想要的更新速率重新注册以进行校准。您可以使用两个不同的侦听器,第一个将杂物排除在外,然后注销自己并注册另一个(好的)侦听器。

于 2010-11-05T02:06:46.290 回答