Получить шаги текущего дня во время datapointListener google Fit

Используя следующий код, я получаю совокупные шаги с тех пор, как начал записывать значения. Но я хотел бы показывать только шаги текущего дня, а не кумулятивно.

@Override
public void onConnected(@Nullable Bundle bundle) {
    DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder()
            .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)
            .setDataSourceTypes(DataSource.TYPE_RAW)
            .build();

    ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() {
        @Override
        public void onResult(DataSourcesResult dataSourcesResult) {
            for( DataSource dataSource : dataSourcesResult.getDataSources() ) {
                if(DataType.TYPE_STEP_COUNT_CUMULATIVE.equals(dataSource.getDataType())) {
                    registerStepsDataListener(dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE);
                }
            }
        }
    };

    Fitness.SensorsApi.findDataSources(googleApiClient, dataSourceRequest)
            .setResultCallback(dataSourcesResultCallback);

    Fitness.RecordingApi.subscribe(googleApiClient, DataType.TYPE_STEP_COUNT_DELTA)
            .setResultCallback(subscribeResultCallback);
}

//onDataPointListener
@Override
public void onDataPoint(DataPoint dataPoint) {
    for( final Field field : dataPoint.getDataType().getFields() ) {
        final Value value = dataPoint.getValue( field );
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tvSteps.setText("Field: " + field.getName() + " Value: " + value.toString());
            }
        });
    }
}

Я попытался заменить константы dataType, но это не сработало. Вызов метода readData с использованием History API в DataPointListener с треском провалился. Пока вы получаете желаемый результат, он сильно отстает, и этого делать не следует.

Другой метод — при смене дня: я получаю данные о совокупных шагах в полночь, а затем сохраняю их в SharedPreferences. Затем вычтите это число во время onDatapoint из показанного кумулятивного.

Но есть ли лучший метод, чем этот?


person suku    schedule 12.06.2016    source источник


Ответы (2)


Основано на шаге 2. Отображение данных за сегодняшний день при использовании Google Fit History API, Google Fit для Android: History API упоминает о:

Один из распространенных вариантов использования, который есть у разработчиков, — это данные за текущий день. К счастью, Google упростил эту задачу, добавив вызов Fitness.HistoryApi.readDailyTotal, который создает объект DailyTotalResult, содержащий данные, собранные за день.

Пример кода, который отключает шаг пользователя за день:

private void displayStepDataForToday() {
    DailyTotalResult result = Fitness.HistoryApi.readDailyTotal( mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA ).await(1, TimeUnit.MINUTES);
    showDataSet(result.getTotal());
}

Вы также можете попробовать решение, приведенное в этом сообщении SO - Как получить количество шагов с помощью REST API Google Fit, такого как приложение Google Fit?. Я надеюсь, что это работает для вас.

person Teyam    schedule 14.06.2016
comment
Но этот метод нужно вызывать из асинтаска. Я попытался вызвать асинхронную задачу внутри onDataPoint. Следовательно, с каждым шагом вызывается асинтаск. Но это приводит к тому, что данные не отображаются до тех пор, пока человек не перестанет ходить. Отображение данных очень прерывистое. - person suku; 15.06.2016

  1. Определите, открывается ли приложение в первый раз. Если true, сохраните значение шага, показанное в первый раз в методе onDataPoint. Эти данные о шагах содержат информацию о шагах, записанных Google Fit ранее (через другие приложения или саму Google Fit). Сохраните значение в общих настройках.
  2. Затем вычтите сохраненные шаги из показанных текущих шагов. Это равно текущему шагу дня. //Для повседневного использования
  3. Определите, изменился ли день с момента последнего открытия приложения.
  4. Если да, то используйте readData api googlefit в течение 1 дня и получите шаги.
  5. Добавьте эти шаги к сохраненным шагам. Таким образом, сохраненные шаги увеличиваются со значениями шагов предыдущего дня.
  6. В onDataPoint вычтите сохраненное значение шагов из показанного значения шагов.

Примечание: вы должны учитывать, что приложение не открывается в течение нескольких дней. Google Fit должен по-прежнему записывать шаги. Сохраненные шаги должны суммировать шаги за все дни, когда приложение не открывалось.

person suku    schedule 19.06.2016