这是一个众所周知的问题,许多 Android 手机在 screen goes off 时关闭加速度计。 .然而,Android Fit(应用程序)似乎发生了一些变化。即使屏幕关闭,健身也会继续计算步数。如果安装了 Fit,则会在 Fit 环境中引发事件以进行步数计数,我可以使用
捕获它们Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder()
.setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)
我已经在三星 S4 和 Oneplus One 上对此进行了测试,在这两种情况下都计算了步数。 他们是怎么做到的?他们使用什么 Android 类? 我的理解是Kitkat之后引入的available方法是实现一个SensorEventListener。例如 theelfismike 提供的代码 implements this .然而,在许多手机上,当屏幕熄灭时计步停止。有趣的是,如果安装了 Google Fit 应用程序,计数似乎不会停止(因此我猜他们会保持加速度计开启)。
我错过了什么吗?凡人程序员是否可以使用屏幕关闭后保持计数步骤的功能? 谢谢!
最佳答案
正如 Ilja 所说,您的代码即使在屏幕关闭后也会运行。但在这种情况下,我想我们需要一些不同的答案。
他们肯定使用了一个保留 wakelock 的服务他们向传感器查询数据。这里的重要部分是持有唤醒锁——如果你不想错过一些数据,你必须防止设备在你的服务生命周期内进入休眠状态。
但这种方法会很快耗尽电池电量,因为为了检测步数,您需要处理来自传感器的大量数据。
这就是为什么有 sensor batching .这使您即使不让设备保持唤醒状态也能获得连续的传感器数据。它基本上将传感器事件存储在芯片本身的基于硬件的队列中,并且仅按预定义的时间间隔将它们分批发送到您的应用程序(服务,..)。这使您可以进行 24/7 监控,而不会显着耗尽电池电量。请注意,只有受支持的芯片组才能做到这一点(您可以在 Android 文档中找到详细信息),如果是旧手机,您需要回退到可怕的唤醒锁保持方法才能获取数据。
您也可以只使用 Google Fit APIs ,但这仅在设备上同时安装了 Google Fit + Google Play 服务并打开监控时才有效。
关于android - Android 中的计步器 : always on?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30390148/