Android加速计传感器监听器频率意外变化

时间:2015-08-17 19:23:36

标签: android listener accelerometer android-sensors sensormanager

我有一个应用程序,它为加速度计,陀螺仪和磁力计调用sensorManager.registerListener(),它为寄存器注册所有传感器,它们每个都设置为SENSOR_DELAY_NORMAL。这种方法很好,绝大部分时间都没有问题。

然而,在查看一些日志时,我注意到加速度计似乎随机变化的频率从大约179毫秒(这似乎是我手机上的平均SENSOR_DELAY_NORMAL)到大约20毫秒。

在进行了大量的挖掘和测试之后,我发现原因是手机快速摇动。当发生这种情况时,所有其他传感器将保持其~177ms的速率,但只有加速度计将其速率增加到~20ms。经过一段时间后,速率最终会从~20ms减少到~179ms的设定速率。

我不确定它恢复到~179ms的速度需要多长时间,我已尝试卸载并重新安装应用程序,如果还没有足够的时间,加速度计仍会在~20ms时触发事件。

我想知道是否可以解决问题,但是当发生这种情况时,以正确的速率取消注册和重新注册监听器,但是无论我将其重置为什么,加速计都将保持在~20ms。我确实发现虽然我可以取消注册加速度计监听器,但这似乎有效,但它并没有解决我的问题。

任何人都知道为什么加速计听众会改变它的射击速度,以及我如何能够解决这个问题?

1 个答案:

答案 0 :(得分:1)

您请求Android的延迟只是建议的延迟。 Android系统和其他应用程序可以改变这一点。 Source

之所以会发生这种情况非常简单 -

  • 设备上只有有限数量的物理传感器,1个加速度计,1个磁力计,1个陀螺仪
  • 说出你的应用程序,每隔100毫秒注册一次来自加速计的所有事件。
  • 另一个应用程序,每隔10毫秒从加速度计请求所有事件
  • 现在由于只有一个传感器,并且有2种不同的需求,Android使加速度计能够以所有应用程序发出的所有延迟请求中的最低者提供数据,然后Android仅以此延迟频率报告所有事件。
  • 在这种情况下,应用程序开发人员可以在事件超出要求时忽略事件。