我使用Sensor API计算步数。我看到它与Google Fit App不同。 Google Fit应用会使用传感器API吗?
代码段:
Fitness.SensorsApi.add(
mGoogleApiFitnessClient,
new SensorRequest.Builder()
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setSamplingRate(5, TimeUnit.SECONDS)
.build(),
mListener)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
Log.i(TAG, "Listener registered!");
} else {
Log.i(TAG, "Listener not registered.");
}
}
});
步数结果
我的应用: 2484
Google Fit: 4636
我错过了什么吗?
答案 0 :(得分:1)
如果您使用Fitness.HistoryApi.readData()
方法,您的值将匹配或至少非常接近Google Fit中显示的值。您在Google健身应用中看到的是历史数据。历史记录我的意思是历史,直到谷歌云存储的最后更新为健身数据。可能只是一分钟前。显然,google fit会批量上传健康数据。这就是您在Google Fit应用中看不到实时更新的原因。例如当你走路时,这些步骤不会随时更改,而是会定期更新。
阅读documentation for Google Fit,详细了解如何拨打HistoryApi
电话。此页面有一个检索步骤计数的详细示例。
因此,如果您上传数据然后阅读历史记录,数据将与Google健身应用中显示的内容相匹配。在此过程中,它还可以组合来自其他来源的数据(如果有),并提供标准化值。
答案 1 :(得分:1)
首先,您正在接收传感器值,用于实时更新,而不是用于统计评估。
除此之外,你正在阅读&#34; delta&#34;的步骤。 &#34;德尔塔&#34;表示自上次更新以来用户获得了多少步骤。它用于构建统计数据,例如每天,每小时,每月等行走统计数据
实际想要阅读的内容是&#34;汇总步骤&#34; - 在您的情况下是&#34;每天的总步数&#34;。为此,请使用HistoryApi
您有两种选择:
<强> 1。阅读汇总数据
DataReadRequest readRequest = new DataReadRequest.Builder()
// The data request can specify multiple data types to return, effectively
// combining multiple data queries into one call.
// In this example, it's very unlikely that the request is for several hundred
// datapoints each consisting of a few steps and a timestamp. The more likely
// scenario is wanting to see how many steps were walked per day, for 7 days.
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
// Analogous to a "Group By" in SQL, defines how data should be aggregated.
// bucketByTime allows for a time span, whereas bucketBySession would allow
// bucketing by "sessions", which would need to be defined in code.
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
PendingResult<DataReadResult> pendingResult =
Fitness.HistoryApi.readData(client, readRequest);
//synchronous execution, should happen on background thread
DataReadResult result = pendingResult.await(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
阅读每日总数 - Google健身网提供便利功能,可以阅读当天的总数
PendingResult<DailyTotalResult> stepsTotalPending = Fitness.HistoryApi
.readDailyTotal(client, DataType.TYPE_STEP_COUNT_DELTA);
//synchronous execution
DailyTotalResult stepsTotalResult = stepsTotalPending
.await(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
与案例1相同,startTime = current day's midnight
和endTime=now
您可以在此处使用支持聚合的任何数据类型,例如卡路里和距离。有关详细信息,请参阅this link
如果您使用解决方案1或2并且仍然具有不同的值,请参阅此FAQ, - 已知情况和Google健身应用可以使用更复杂的方法计算步数/卡路里/距离