Я пытаюсь получать ежедневные данные о количестве шагов от Google Fit для отображения в моем приложении. Кажется, что код, который я использую, правильный, так как я получаю некоторые данные, но цифры сильно отличаются, когда я сравниваю данные, которые я получаю в приложении Google Fit. Например, в Google Fit (как в Интернете, так и в приложении для Android) на 19 марта он показывает 2269 шагов. В моем приложении на 19 марта показано 64 шага. Данные, которые я получаю в своем приложении, постоянно меньше десятичной степени. Я запрашиваю данные неправильно? Соответствующий код ниже.
Код разработчика клиента
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());
}
}
}
}
}
}
}