Вот как я решил эту проблему.
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()
, который возвращает вам тип, либо шаги были записаны датчиком, либо это был ввод использования.
Вот как вы можете отфильтровать шаги пользовательского ввода, чтобы избежать взлома шагов в вашем приложении.