Android中的步数计数器:永远在线?

时间:2015-05-22 06:52:54

标签: android accelerometer google-fit

众所周知,许多Android手机会在screen goes off时关闭加速度计。然而Android Fit(应用程序)似乎发生了一些变化。即使屏幕熄灭,Fit也会保持计数步数。如果安装了Fit,则会在Fit环境中引发事件以进行步数计数,并且我可以使用

捕获它们
Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder()
                .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)

我在三星S4和Oneplus One上测试了这个,在这两种情况下都计算了步数。 他们是怎么做到的?他们使用什么Android类? 我的理解是,自Kitkat以来引入的可用方法是实现SensorEventListener。例如,theelfismike提供implements this的代码。然而,在许多手机上,当屏幕熄灭时,步数会停止。有趣的是,如果安装了Google Fit应用程序,计数似乎并没有停止(因此我猜他们会继续使用加速计)。

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

您也可以使用Google Fit APIs,但只有当设备上安装了Google Fit + Google Play服务并启用了监控功能时,才能使用此功能。

答案 1 :(得分:0)

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

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