Я пытаюсь получить шагающие шаги с сегодняшнего дня. Поэтому я нашел 2 решения. 1)Google Fit History API - неправильные значения для шагов
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, 00);
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;
}
}}
2)
private void getStepsToday() {
PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mGoogleApiFitnessClient, DataType.TYPE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
int total = totalSet.isEmpty()
? 0
: totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
publishTodaysStepData(total);
} else {
publishTodaysStepData(0);
}
}
Используя первый я получить, например, 27, а с помощью второго шага 1 425 в качестве ответа. Правильный (после сравнения с Google app) должен быть 1425. Таким образом, почему первый не работает?
У меня также такая же проблема, попросив шаги с прошлой недели. Используя метод 1 для шагов с прошлой недели, я понял, что делаю шаги в течение правых дней (иногда даже правильных), но всякий раз, когда значение шагов больше 50 (я думаю), это значение неверно.
Есть ли у кого-нибудь ответ на это странное поведение?