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

Android accelerometer sensor listener frequency changing unexpectedly

我有一个为加速度计、陀螺仪和磁力计调用 sensorManager.registerListener() 的应用程序,它为处理程序注册了所有传感器,并且每个传感器都设置为 SENSOR_DELAY_NORMAL。这在绝大多数时间都没有问题。

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

经过大量的挖掘和测试,我发现原因是 phone 被快速摇动。当发生这种情况时,所有其他传感器将保持其约 179 毫秒的速率,但只有加速度计会将其速率增加到约 20 毫秒。一段时间后,速率最终会从 ~20ms 下降到 ~179ms 的设定速率。

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

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

有人知道为什么加速度计侦听器会改变它的发射速率,我可以如何解决这个问题?

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

发生这种情况的原因很简单-

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