获取用户在后台发送到服务器的每日步数的最佳方法

我想每24小时向我的服务器发送一下我走了几步。 我有一个AlarmManager来关闭alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),1000*60*60*24, pendingIntent1)

现在这就是我被困的地方……我应该如何衡量每日步骤?(记住我需要在后台发送这个)我可以使用这个可以覆盖此函数的服务public void onSensorChanged(SensorEvent event) this doesn’因为我的服务可能被破坏(电池会很快耗尽),所以看起来很准确。

要么

我可以尝试使用Google健身,但每次我尝试获取数据时都需要用户连接mGoogleApiClient.connect() (我需要在后台获取此数据)

有人有这方面的经验吗?

onSensorChanged()确实可以正常工作。 传感器应该在设备中足够好,它不应该将振动计为一个步骤。 但是,使用onSencorChanged()捕获步数时唯一的问题是,如果我们摇动设备,它会将其视为一个步骤。 为避免这种情况,大多数解决方案将实现跟踪位置并发送到后端,以便后端计算设备是否实际移动。 它将实际步数发送回可以显示的设备。

除此之外,如果您认为服务被破坏是您的关注,您可以以有保证的方式重新启动它。 请参阅我无法重启服务的答案。 这解释了当app通过最近的任务或在内存不足的情况下被系统杀死时如何使用UncaughtExceptionHandler重启服务。 您的服务无法在深度睡眠模式下运行。 您可以使用WakefulBroadcastReceiver和startWakefulService()来运行它。

您应该尽可能减少向后端发送数据的频率,以避免耗尽电池电量。

我不确定GoogleFit API。 为自己研究这个问题,你可以为你的问题添加答案。 😉

更新:
关于android中传感器的精彩文章 – Android设备如何应对待机模式(屏幕关闭)和挂起模式 下的连续感应 。

好注意点:

“挂起”是一种低功耗模式,其中SoC(片上系统)未通电。 此模式下设备的功耗通常比“开启”模式下的功耗低100倍