0

我试图从方向传感器只获得 1 个事件。

我的代码是:

@Override
public void onSensorChanged(SensorEvent event) {
Log(event);
unregisterSensor(...);
}

然后每 1000 毫秒在一个线程中执行一次:

registerSensor();
Thread.sleep(2000);

问题是,如果我在方法结束后取消注册传感器(就像我已经完成的那样),那么下一次(当我重新注册传感器时)它将记录之前捕获的相同值事件(移动手机时) . 如果我让 onSensorChanged 能够运行两次(使用计数器),那么它会检测到正确的值并将该值记录两次。

只调用一次的方法有什么问题?

4

2 回答 2

1

根据您的代码,在onSensorChanged()您记录 amyevent中,而不是event作为参数得到的。

此外,那 - 你为什么不告诉LocationManager你每 1 或 2 秒只向你发送新事件,而不是注册和取消注册的所有麻烦?您可以使用方法的minTime参数来执行此操作LocationManager#requestLocationUpdates()

于 2012-10-12T17:13:03.127 回答
0

我不知道传感器正在跟踪事件,但我也不感到惊讶,因为我在 Locationlistener for network provider 中看到了类似的行为。

话虽如此,我建议您让onSensorChanged()调用几次,删除第一个(即缓存)并平均(或使用低通滤波器)以下几个。您将获得更好的准确性,并且更多的事件不会结束您的电池:-)

祝你好运。

于 2012-10-13T00:21:02.460 回答