Как отличить шаги, добавленные вручную, от шагов, записанных датчиком, в Google Fit Api

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


person Mudasir Sharif    schedule 08.01.2019    source источник
comment
Вы можете попробовать проверить эти похожие темы: 32119448, 31451851   -  person Jacque    schedule 09.01.2019


Ответы (2)


Вот как я решил эту проблему.

   final DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(googleFitUtils.getEstimatedSteps())
            .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();
            if (!"user_input".equals(dp.getOriginalDataSource().getStreamName()))
                totalSteps += steps;
        }
    }

Первая точка -> До того, как я получил общее количество шагов, используя

Fitness.HistoryApi.readDailyTotal

который возвращает одну точку данных с общим количеством ежедневных шагов. Второй пункт -> Затем я изменил способ получения ежедневных шагов, используя

Fitness.HistoryApi.readData

Он возвращает массив точек данных с фрагментами ежедневных шагов. Каждая точка данных имеет свойство

dp.getOriginalDataSource().getStreamName()

который возвращает вам тип, либо шаги были записаны датчиком, либо это был ввод использования. Вот как вы можете фильтровать шаги пользовательского ввода, чтобы избежать взлома шагов в вашем приложении.

person Mudasir Sharif    schedule 09.01.2019
comment
Возвращает ли googleFitUtils.getEstimatedSteps() также DataType.TYPE_STEP_COUNT_DELTA? - person ysfcyln; 08.04.2019

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

Ваше приложение может записывать количество шагов пользователя с помощью Recording. API для создания подписки на тип данных DataType.TYPE_STEP_COUNT_CUMULATIVE

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

Попробуйте ознакомиться с основными API Google Fit, которые вам понадобятся:

person MαπμQμαπkγVπ.0    schedule 09.01.2019