Как получить данные за все время из Google Fit API?

Мне нужно получить количество шагов, пройденных пользователем с тех пор, как он начал использовать приложение до сегодняшнего дня. Как это сделать с помощью API Google FIT?


person Ramya Ramesh    schedule 11.04.2016    source источник


Ответы (2)


У меня самого был этот вопрос. Что я сделал, так это создал DataRequest с помощью:

endTime сейчас (сегодня):

Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();

и время начала выпуска первой версии приложения Google Fit:

cal.set(2014, 9, 28);
cal.set(Calendar.HOUR_OF_DAY, 0); //so it get all day and not the current hour
cal.set(Calendar.MINUTE, 0); //so it get all day and not the current minute
long startTime = cal.getTimeInMillis();

Сборка DataReadRequest: (можно разделить, если хотите)

        DataReadRequest readRequest =  new DataReadRequest.Builder()
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .read(DataType.AGGREGATE_STEP_COUNT_DELTA)
                .enableServerQueries()
                .build();

Таким образом, вы получите все данные, начиная с 28 октября 2014 года.

person JPL    schedule 15.04.2016

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

Вам нужно создать экземпляр DataReadRequest для чтения данных из истории фитнеса.

Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.WEEK_OF_YEAR, -1);
long startTime = cal.getTimeInMillis();

java.text.DateFormat dateFormat = DateFormat.getDateInstance();
Log.e("History", "Range Start: " + dateFormat.format(startTime));
Log.e("History", "Range End: " + dateFormat.format(endTime));

//Check how many steps were walked and recorded in the last 7 days
DataReadRequest readRequest = new DataReadRequest.Builder()
        .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
        .bucketByTime(1, TimeUnit.DAYS)
        .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
        .build();

Вы также можете сгруппировать эти данные в Bucket объектов по времени или сеансам. В этом примере вы запрашиваете агрегированные данные о шагах за последнюю неделю и распределяете эти данные по дням.

Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.HOUR_OF_DAY, -1);
long startTime = cal.getTimeInMillis();

DataSource dataSource = new DataSource.Builder()
    .setAppPackageName(this)
    .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
    .setName("Step Count")
    .setType(DataSource.TYPE_RAW)
    .build();

int stepCountDelta = 1000000;
DataSet dataSet = DataSet.create(dataSource);

DataPoint point = dataSet.createDataPoint()
        .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
point.getValue(Field.FIELD_STEPS).setInt(stepCountDelta);
dataSet.add(point);

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

Проверьте это, связанные с этим вопросы:

person abielita    schedule 12.04.2016
comment
теперь, если вы хотите получить данные с тех пор, как пользователь начал использовать приложение, до сегодняшнего дня, каковы будут startTime и endTime? И какую стратегию группирования я должен использовать? - person Ramya Ramesh; 12.04.2016
comment
Мой вопрос заключался в том, как узнать количество шагов, пройденных с тех пор, как пользователь установил приложение, до сих пор. Ваш ответ совершенно неуместен. - person Ramya Ramesh; 12.04.2016
comment
Исходя из моего примера, вы можете использовать DataReadRequest, чтобы проверить, сколько шагов было пройдено и записано. После создания DataReadRequest вы можете запросить данные из GoogleApiClient с помощью команды Fitness.HistoryApi.readData, как указано здесь. Если вызов возвращается успешно, вы можете получить доступ к данным о пригодности пользователя из объекта DataReadResult. - person abielita; 12.04.2016
comment
@abielita Не могли бы вы помочь мне с данными о сне в Google Fit? Вот мой вопрос: stackoverflow.com/q/43780050/7382665 - person Shruti; 04.05.2017