如何缓慢轮询传感器?

How to poll sensors slowly?

我正在编写一个应用程序,可以在很长一段时间内将传感器数据复制到文本文件中。所以我想使用尽可能少的电池,因此需要更慢的轮询时间。

目前我有这个作为我的听众:

sMgr.registerListener(this,sProximity,5000000);

我认为应该每 5,000,000 微秒轮询一次传感器。但是,它似乎每秒轮询 4 次。无论我输入什么值,这实际上都不会改变。

目前我只是在应用程序中使用 onSensorChanged 方法覆盖显示传感器数据 - 这可能就是它如此频繁地轮询传感器的原因吗?

你不能"poll sensors slowly"。

根据 docs:

samplingPeriodUs
The rate sensor events are delivered at. This is only a hint to the system. Events may be received faster or slower than the specified rate. Usually events are received faster.

此外,每 5 秒轮询在电池使用方面不会给您带来任何比轮询更快的好处,因为两者都会阻止设备进入睡眠模式。

如果这只是为了测试目的,并且最终您要查看比 5 秒长得多的周期,即 15 或 30 分钟,那么一种方法是使用 AlarmManager 设置重复启动 Service 的警报,它会为传感器注册侦听器、存储值并注销侦听器,直到触发下一个警报。

如果您确实希望每 5 秒轮询一次,并且您只关心存储 space 以加快轮询速度,您可以只存储最后存储的值的时间戳,然后丢弃更快收到的每个值比你想要的轮询周期,但正如我之前所说,这对你的电池消耗没有帮助。