当getDailyTotal和getData按天访问时,Stepcount会有所不同。请帮忙。
Fitness.HistoryApi.readDailyTotal(App.gClient, DataType.TYPE_STEP_COUNT_DELTA)
- >返回步数为1515
private void getStepsDataHistory(long startTime, long endTime) {
DataReadRequest dataReadRequest = new DataReadRequest.Builder()
.bucketByTime(1, TimeUnit.DAYS)
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS).build();
- >返回一周的数据,今天的步骤= 2877
编辑:我也在logcat中收到此警告: 无法在Shared Pref for DataType {com.google.step_count.delta {steps(i)}}中找到汇总数据。
答案 0 :(得分:0)
请确保您提供的开始时间和结束时间是正确的,即从午夜到现在的12A。但是,如果您需要在无法显示权限面板的区域(例如,Android Wear监视面)中使用步骤数据,则readDailyTotal非常有用。 所以我建议你以这种方式使用Aggregate方法,你将得到安静的平等步数作为谷歌适合的应用程序。看看这个。
public int getStepsCount(long startTime, long endTime) {
PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi
.readData(
fitnessClient,
new DataReadRequest.Builder()
.aggregate(DataType.TYPE_STEP_COUNT_DELTA,
DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime,
TimeUnit.MILLISECONDS)
.build());
int steps = 0;
DataReadResult dataReadResult = pendingResult.await();
if (dataReadResult.getBuckets().size() > 0) {
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;
}