安卓加速度传感器监听器频率意外变化

3
我有一个应用程序,调用sensorManager.registerListener()注册加速度计、陀螺仪和磁力计,将所有传感器都设置为SENSOR_DELAY_NORMAL。大多数情况下没有问题。
然而,在查看一些日志时,我注意到加速度计似乎会随机地从大约179毫秒(这似乎是我的手机上平均的SENSOR_DELAY_NORMAL)变为约20毫秒。
经过一番挖掘和测试,我发现原因是当手机快速晃动时。当这种情况发生时,所有其他传感器都将保持其~179ms的速率,但只有加速度计会将其速率增加到~20ms。经过一段时间后,速率最终会从~20ms降至设置速率的~179ms。
我不确定它需要多长时间才能恢复到~179ms的速率,我尝试卸载和重新安装应用程序,如果还没有足够的时间,加速度计仍将以~20ms的速率触发事件。
我想看看是否可以通过在发生此情况时按正确的速率取消注册和重新注册侦听器来解决问题,但是无论我将其重置为什么速率,加速度计都将以~20ms的速率运行。但是我发现,我可以注销加速度计侦听器,这似乎有效,但这并不能解决我的问题。
有人知道为什么加速度计侦听器会更改其触发速率,以及我如何解决这个问题吗?
1个回答

2
你请求Android的延迟只是建议性的。Android系统和其他应用程序可以更改此设置。来源 这种情况发生的原因很简单:
- 设备上仅有有限数量的物理传感器,1个加速度计、1个磁力计、1个陀螺仪。 - 假设你的应用程序每100毫秒注册一次加速度计事件。 - 另一个应用程序每10毫秒请求一次加速度计事件。 - 现在由于只有一个传感器和两个不同的需求,Android会使加速度计以所有应用程序中最低的延迟请求频率提供数据,并且Android仅以该延迟频率报告所有事件。 - 在这种情况下,应用程序开发人员需要忽略超出所需范围的事件。

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