Счетчик шагов Google Fit

Мне нужно получить мои данные о пригодности, чтобы отразить то, что отображается в приложении для Android. Я пробовал использовать Sensor API, но это число отражает количество шагов, предпринятых с момента загрузки устройства, а не за день.

Как получить шаг считать из Google Fit REST API, как приложение Google Fit?

Я также пробовал использовать History API и запрашивать stepcount_cumulative и step_delta. Оба эти значения не отражают значения подходящего API.

Мне пришла в голову идея сохранить значение предыдущего дня в sharedPref и вычесть разницу, чтобы получить истинное значение. Также необходимо учитывать другие расчеты, когда устройство перезагружается.

Есть ли более простой способ получить нужные мне ценности?


person Cole Murray    schedule 23.03.2015    source источник
comment
Вы пытаетесь прочитать данные о шагах, которые другие пользователи зарегистрировали в Google Fit, или вы пытаетесь использовать датчик шага на самом устройстве? Думаю, в этом отношении вопрос может быть немного неясным   -  person Glenn Bech    schedule 24.03.2015
comment
Я открыт для любой реализации. Я бы предпочел получать данные из API Fit, так как, на мой взгляд, он будет более точным.   -  person Cole Murray    schedule 24.03.2015


Ответы (2)


Попробуйте этот новый метод HistoryApi.readDailyTotal(). (Требуется сервис Google Play v24)

PendingResult<DailyTotalResult> result = HistoryApi.readDailyTotal(client, TYPE_STEP_COUNT_DELTA);
   DailyTotalResult totalResult = result.await(30, SECONDS);
   if (totalResult.getStatus().isSuccess()) {
     DataSet totalSet = totalResult.getTotal();
     long total = totalSet.isEmpty()
         ? 0
         : totalSet.getDataPoints().get(0).getValue(FIELD_STEPS).asInt();
   } else {
     // handle failure
   }

https://developer.android.com/reference/com/google/android/gms/fitness/HistoryApi.html

person JamesC    schedule 07.05.2015
comment
Не могли бы вы опубликовать какой-нибудь контент по ссылке? - person Robert; 07.05.2015

Это сработало для меня: https://github.com/rsteckler/Android-Google-Fit-Service-Skeleton

Функция, которую вы ищете:

   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, 0);
        cal.set(Calendar.SECOND, 0);
        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;

            }
        }

        publishTodaysStepData(totalSteps);
    }
person Gudin    schedule 23.03.2015
comment
Это точно возвращает категоризированную сумму. Однако это не включает разные шаги. Можно ли заставить API возвращать и их? - person Cole Murray; 24.03.2015
comment
Я просто играл с Fit API какое-то время, не знаю: / - person Gudin; 24.03.2015