我试图从方向传感器中只获得一个事件。
我的代码是:
@Override
public void onSensorChanged(SensorEvent event) {
Log(event);
unregisterSensor(...);
}
然后我每隔1000毫秒在一个主题中执行:
registerSensor();
Thread.sleep(2000);
问题是,如果我在方法结束后取消注册传感器(就像我已经完成)那么下次(当我重新注册传感器时)它将记录之前捕获的相同值事件(移动时)电话)。如果我给onSensorChanged能够运行两次(使用计数器),那么它会检测到正确的值并将该值记录两次。
该方法只调用一次有什么问题?
答案 0 :(得分:1)
根据您的代码,在onSensorChanged()
中,您记录的是myevent
,而不是您获得的event
。
此外,为什么不告诉LocationManager
每1或2秒只发送一次新事件,而不是注册和取消注册所有麻烦?您可以使用minTime
方法的LocationManager#requestLocationUpdates()
参数执行此操作。
答案 1 :(得分:0)
我不知道传感器对事件的追踪,但我也不会感到惊讶,因为我在Locationlistener中看到了类似网络提供商的行为。
话虽如此,我建议您让onSensorChanged()
被调用几次,丢弃第一个(缓存)和平均(或使用低通滤波器)以下的。您将获得更好的准确性,并且更多的偶数将不会结束您的电池: - )