3

我在尝试创建一个跟踪接近传感器值的应用程序时遇到了问题。该应用程序的目的是定期(例如 30 秒)记录瞬时接近值。

遵循 API 文档,为该类型的传感器创建并附加标准侦听器。但是,即使我用手盖住传感器,该值总是报告为“5.0”(5cm,传感器的最大值)。

但是,如果我启动一个不同的应用程序(也监视接近传感器值),两个应用程序都会开始正确报告接近度。当我关闭另一个应用程序(Android Sensor Box)时,我的应用程序一直恢复为仅报告 5.0。

我已经调试了应用程序并在“ onSensorChanged ”事件中设置了一个断点,以仔细检查传递给onSensorChanged方法的SensorEvent对象,它始终为 5.0

编辑#2:它似乎不限于接近传感器。陀螺仪传感器的行为方式相同,而加速度计和磁力计似乎显示正确和最新的值。所有四个都以相同的方式引用和访问。

有任何想法吗?

4

1 回答 1

4

好吧,事实证明我将再次回答我自己的问题。

应用程序的结构方式(这是有充分理由的)意味着注册了一个监听器,并且传感器的第一个报告值被作为读数,而不是不断地接受新的读数。这适用于加速度计读数,但事实证明,一些传感器在第一次读数中报告了它们的默认值(例如接近传感器的“FAR”或陀螺仪的 0.0/0.0/0.0)。只有在 2-3 次“onSensorChanged”事件之后才开始报告正确的值。

我假设这与省电和某些传感器需要时间“准备好”报告数据有关。我不知道为什么可接受的做法是使用不正确的值触发 sensorChanged 事件,但这似乎正在发生。

尽管如此,对我来说,解决方法是丢弃前 2-3 个读数(它们以毫秒为间隔出现),并简单地使用第四个读数作为更可靠的读数。

于 2013-05-24T14:20:35.350 回答