我正在尝试获取今天的步行步骤。因此我找到了2个解决方案。 1)
private void getStepsToday() {
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 00);
long startTime = cal.getTimeInMillis();
final DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);
DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);
int totalSteps = 0;
for (DataPoint dp : stepData.getDataPoints()) {
for(Field field : dp.getDataType().getFields()) {
int steps = dp.getValue(field).asInt();
totalSteps += steps;
}
}}
2)
private void getStepsToday() {
PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mGoogleApiFitnessClient, DataType.TYPE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
int total = totalSet.isEmpty()
? 0
: totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
publishTodaysStepData(total);
} else {
publishTodaysStepData(0);
}
}
通过使用第一个,我得到了示例 27,并使用第二个得到了 1425 步作为答案。正确的(与 google fit 应用程序比较后)应该是 1425。那么为什么第一个不起作用?
我也遇到了同样的问题,询问了上周的步骤。通过使用上周的步数方法 1,我意识到我确实获得了正确日期的步数(有时甚至是正确的日子),但每当步数值超过 50(我认为)时,该值就不正确。
有人对这种奇怪的行为有答案吗?
最佳答案
试试这个
public int getStepsCount(long startTime, long endTime) {
DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
.setDataType(DataType.TYPE_STEP_COUNT_DELTA)
.setType(DataSource.TYPE_DERIVED)
.setStreamName("estimated_steps")
.setAppPackageName("com.google.android.gms").build();
PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi
.readData(
fitnessClient,
new DataReadRequest.Builder()
.aggregate(ESTIMATED_STEP_DELTAS,
DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.HOURS)
.setTimeRange(startTime, endTime,
TimeUnit.MILLISECONDS).build());
int steps = 0;
DataReadResult dataReadResult = pendingResult.await();
if (dataReadResult.getBuckets().size() > 0) {
//Log.e("TAG", "Number of returned buckets of DataSets is: "
//+ dataReadResult.getBuckets().size());
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
for (DataPoint dp : dataSet.getDataPoints()) {
for (Field field : dp.getDataType().getFields()) {
steps += dp.getValue(field).asInt();
}
}
}
}
} else if (dataReadResult.getDataSets().size() > 0) {
for (DataSet dataSet : dataReadResult.getDataSets()) {
for (DataPoint dp : dataSet.getDataPoints()) {
for (Field field : dp.getDataType().getFields()) {
steps += dp.getValue(field).asInt();
}
}
}
}
return steps;
}
关于android - Google Fit History API - 步数值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084380/