我遇到了一个问题,试图创建一个跟踪接近传感器值的应用程序。该应用程序的目的是定期记录瞬时接近值(比如说30秒)。
遵循API文档,为该类型的传感器创建并附加标准侦听器。但是,即使我用手盖住传感器,该值也始终报告为“5.0”(5cm,传感器的最大值)。
但是,如果我启动一个不同的应用程序(也监视接近传感器值),两个应用程序都会开始正确报告接近度。当我关闭其他应用程序( Android传感器盒 )时,我的应用程序将恢复为仅报告5.0。
我调试了应用程序并在' onSensorChanged '事件中设置了断点,以仔细检查 SensorEvent 对象被传递给 onSensorChanged 方法,它总是5.0
编辑#2:它似乎不仅限于接近传感器。陀螺仪传感器的行为方式相同,而加速度计和磁力计似乎显示正确和最新的值。所有四个都以相同的方式被引用和访问。
有什么想法吗?
答案 0 :(得分:4)
嗯,事实证明我将再次回答我自己的问题。
应用程序的结构方式(并且有充分的理由)意味着监听器已注册,并且传感器的第一个报告值被视为读数而不连续接受新的读数。这适用于Accelerometer读数,但事实证明有些传感器在第一次读数时报告了它们的DEFAULT值(例如接近传感器的'FAR'或陀螺仪的0.0 / 0.0 / 0.0)。仅在2-3'onSensorChanged'事件之后才开始报告正确的值。
我认为这与节电和某些需要时间准备好报告数据的传感器有关。我不知道为什么可接受的做法是使用不正确的值触发sensorChanged事件,但这似乎正在发生。
尽管如此,对我来说,解决方法是丢弃前2-3个读数(无论如何它们以毫秒间隔进入)并简单地使用第四个读数作为更可靠的读数。