仅从传感器获取 1 个事件



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

我的代码是:

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

然后在每 1000 毫秒的一个线程中我这样做:

registerSensor();
Thread.sleep(2000);

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

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

根据您的代码,在onSensorChanged()中,您记录了一个myevent,而不是您作为参数获得的event

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

我不知道传感器会跟踪事件,但我也不感到惊讶,因为我在网络提供商的位置监听器中看到类似的行为。

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

祝你好运。

最新更新