Прежде всего, вы получаете значение датчика, которое используется для обновления в реальном времени, а не для статистической оценки.
Кроме того, вы читаете «дельту» шагов. «Дельта» означает, сколько шагов сделал пользователь с момента последнего обновления. Он используется для построения статистики, например. статистика ходьбы за день, час, месяц и т. д.
То, что вы на самом деле хотите прочитать, это "совокупные шаги" - в вашем случае это "общее количество шагов в день". Для этого вы используете HistoryApi
У вас есть два варианта:
<сильный>1. Чтение сводных данных
DataReadRequest readRequest = new DataReadRequest.Builder()
// The data request can specify multiple data types to return, effectively
// combining multiple data queries into one call.
// In this example, it's very unlikely that the request is for several hundred
// datapoints each consisting of a few steps and a timestamp. The more likely
// scenario is wanting to see how many steps were walked per day, for 7 days.
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
// Analogous to a "Group By" in SQL, defines how data should be aggregated.
// bucketByTime allows for a time span, whereas bucketBySession would allow
// bucketing by "sessions", which would need to be defined in code.
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
PendingResult<DataReadResult> pendingResult =
Fitness.HistoryApi.readData(client, readRequest);
//synchronous execution, should happen on background thread
DataReadResult result = pendingResult.await(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
Чтение итогов за день — в Google Fit есть удобная функция для чтения итогов за текущий день.
PendingResult<DailyTotalResult> stepsTotalPending = Fitness.HistoryApi
.readDailyTotal(client, DataType.TYPE_STEP_COUNT_DELTA);
//synchronous execution
DailyTotalResult stepsTotalResult = stepsTotalPending
.await(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
Это то же самое, что и случай 1 с startTime = current day's midnight
и endTime=now
.
Здесь вы можете использовать любой тип данных, который поддерживает агрегацию, например. калории и расстояние. Подробности смотрите по этой ссылке.
Если вы используете решение 1 или 2 и у вас по-прежнему разные значения, см. это Часто задаваемые вопросы, - это известная ситуация, и приложение Google Fit может рассчитывать шаги/калории/расстояние с помощью более сложного подхода.
person
Drew
schedule
11.05.2016