我正在尝试从Google Fit逐日获取步数数据,以便在我的应用程序中显示。看起来我正在使用的代码是正确的,因为我正在获取一些数据,但是当我比较我获得的Google Fit应用程序的数据时,数字已经过时了。例如,在3月19日的Google Fit(在网络和Android应用中),它显示了2269步。在我3月19日的应用程序中显示了64个步骤。我在我的应用程序中获得的数据始终低于10的功率。我是否正确地请求数据?相关代码如下。
客户端构建器代码
GoogleApiClient.Builder builder = new GoogleApiClient.Builder(Main.instance)
.addApi(Fitness.API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ));
请求构建器代码
private DataReadRequest queryFitnessData(long date)
{
// Build a single day range.
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long startTime = cal.getTimeInMillis();
cal.add(Calendar.DATE, 1);
cal.add(Calendar.MILLISECOND, -1);
long endTime = cal.getTimeInMillis();
DataReadRequest readRequest = new DataReadRequest.Builder()
.enableServerQueries()
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
return readRequest;
}
执行查询
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(googleClient, readRequest).await(1, TimeUnit.MINUTES);
if(dataReadResult.getBuckets().size() > 0)
{
Bucket bucket = dataReadResult.getBuckets().get(0);
for(DataSet dataSet : bucket.getDataSets())
{
for(DataPoint dp : dataSet.getDataPoints())
{
if(dp.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA))
{
for(Field field : dp.getDataType().getFields())
{
if(field.getName().equals(Field.FIELD_STEPS.getName()))
{
if(listener != null)
{
listener.onStepCount(dp.getValue(field).asInt());
}
}
}
}
}
}
}
答案 0 :(得分:0)
我可能尝试的第一件事是摆脱enableServerQueries()并查询本地数据,这可能是同步时间问题。
除了看不到dataReadResult中返回的其他数据之外,很难说清楚。我很想把几条Log语句放进去看看发生了什么。
我的代码如下所示,适用于我
for (Bucket bucket : dataReadResult.getBuckets()) {
Log.d(TAG, "Bucket start time: " + bucket.getStartTime(TimeUnit.SECONDS));
List<DataSet> dataSets = bucket.getDataSets();
totalStepsValue = 0;
for (DataSet dataSet : dataSets) {
for (DataPoint dp : dataSet.getDataPoints()) {
for (Field field : dp.getDataType().getFields()) {
if (field.getName().equals("steps")) {
totalStepsValue += dp.getValue(field).asInt();
}
}
}
}
Log.d(TAG, "totalStepsValue: " + totalStepsValue);
}
还可以尝试使用30分钟的桶获取一天的数据,看看你是否有任何不同。