12

众所周知,许多安卓手机在屏幕熄灭时会关闭加速度计。然而,Android Fit(应用程序)似乎发生了一些变化。即使屏幕熄灭,Fit 也会继续计算步数。如果安装了 Fit,则会在 Fit 环境中引发用于计步的事件,我可以使用以下方法捕获它们

Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder()
                .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)

我已经在三星 S4 和一加一上对此进行了测试,在这两种情况下,步骤都被计算在内。他们是怎么做到的?他们使用哪些 Android 类?我的理解是自Kitkat以来引入的可用方法是实现一个SensorEventListener。例如 theelfismike 提供了实现这个的代码。然而,在许多手机上,当屏幕熄灭时计步会停止。有趣的是,如果安装了 Google Fit 应用程序,计数似乎不会停止(因此我猜他们会保持加速度计开启)。

我错过了什么吗?凡人程序员可以使用屏幕关闭后保持计数步骤的功能吗?谢谢!

4

2 回答 2

8

正如 Ilja 所说,即使屏幕关闭,您的代码也会运行。但在这种情况下,我想我们需要一个不同的答案。

他们肯定会使用一个保持唤醒锁的服务,并且他们会向传感器查询数据。这里的重要部分是保持唤醒锁 - 如果您不想错过某些数据,您必须防止设备在服务生命周期内进入睡眠状态。

但是这种方法会很快耗尽电池电量,因为为了检测步骤,您需要处理来自传感器的大量数据。

这就是为什么会有传感器批处理。这使您即使不保持设备唤醒也能获得连续的传感器数据。它基本上将传感器事件存储在芯片本身的基于硬件的队列中,并且仅以预定义的间隔分批将它们发送到您的应用程序(服务,..)。这使您可以进行 24/7 全天候监控,而不会显着耗尽电池电量。请注意,只有受支持的芯片组才能做到这一点(您可以在 Android 文档中找到详细信息),如果是旧手机,您需要回退到可怕的唤醒锁保持方法才能获取您的数据。

您也可以只使用Google Fit APIs,但这只有在设备上同时安装了 Google Fit + Google Play Services 并打开监控时才有效。

于 2015-05-22T07:14:49.263 回答
0

当屏幕关闭或 Activity 失去焦点时,每个正常线程都会继续工作......但是当 Activity 被杀死时,所有线程都被杀死......

但是,您可以将服务用于长时间运行的任务,例如询问加速度计

于 2015-05-22T06:58:05.127 回答