android - Android 中的计步器 : always on?

标签 android accelerometer google-fit

这是一个众所周知的问题,许多 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/

相关文章:

android - 如何使用表情符号库在文本中添加表情符号?

c# - 如何计算手机平放时绕 y 轴(滚动)的旋转?

android - GPS 跟踪和加速度计

java - 无法连接到 Google Play 服务;获取取消状态代码

android - Android 上 Google Fit 的 OAuth 2.0 客户端 ID 的用途是什么

android - 如何将 ArrayAdapter.getView() 中的 'position' 参数转换为基础数据的绝对索引?

java - 在滑动手势后动画对象

Android:同时读取GPS + 加速计传感器

android - 如何写血压google fit

Android:单击按钮从数据库中删除行