安卓接近传感器 - 值不正确

3
我遇到了一个问题,尝试创建一个跟踪接近传感器值的应用程序。此应用程序的目的是在固定时间间隔(例如30秒)记录瞬时接近值。
根据API文档,创建并附加标准监听器以侦听该类型的传感器。但是,即使我用手覆盖传感器,其值始终报告为“5.0”(传感器的最大值)。
但是,如果我启动另一个应用程序(也监视接近传感器值),则两个应用程序都开始正确报告接近度。当我关闭其他应用程序(Android Sensor Box)时,我的应用程序会恢复仅报告5.0的状态。
我已调试应用程序,并在“onSensorChanged”事件中设置断点,以再次检查传递给“onSensorChanged”方法的SensorEvent对象。结果始终为5.0。
编辑#2:似乎不仅限于接近传感器。陀螺仪传感器的行为方式相同,而加速度计和磁强计似乎显示正确和实时的值。所有四个传感器都以相同的方式引用和访问。
有任何想法吗?

不展示你的代码,很难得到任何推荐。 - Sam R.
代码完全按照Android SDK建议编写。问题在于传感器变化事件返回了错误的值。这不是我的代码的一部分。 - Iv4n
你在测试哪个设备? - Sam R.
出现此问题的三个设备分别是三星Galaxy S2、Nexus 4和一款我现在记不起型号的华为手机。我已经编辑了原始问题并提供了更多信息 - Iv4n
1个回答

4

好的,事实证明我又要回答自己的问题了。

应用程序的结构(有很好的原因)意味着注册了一个监听器,第一个传感器报告的值被视为读数,而不是持续接受新的读数。这对加速度计读数很有效,但结果表明,一些传感器在此第一次读数时会报告它们的默认值(例如,距离传感器的“FAR”,或陀螺仪的0.0 / 0.0 / 0.0)。只有在2-3个“onSensorChanged”事件之后,才开始报告正确的值。

我认为这与省电和某些传感器需要时间来准备好报告数据有关。我不知道为什么可接受的做法是触发具有不正确值的sensorChanged事件,但似乎就是这样。

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


如果只使用接近传感器,则没有持续的读数“流”。只有一个或两个错误,然后才是正确的。因此,我不能仅丢弃前X个读数。我想我会使用异步任务来确保正确识别“最后”读数。 - Amir Uval
显然,这取决于您如何构建代码的其余部分。我们正在使用线程,如果它们没有及时发送响应,线程调度程序将采用最后记录的值(因此等待一定数量的事件对我们有效)。 - Iv4n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接