2016-08-05 1 views
0

Прогулки/Бег/Езда на велосипеде - это примеры действий, автоматически записываемых на телефоны Android с установленным google. Я пытался получить эту деятельность от Fit API для Android с помощью следующего запроса ...Автоматически записанные действия отсутствуют сводная информация о сводной деятельности из google fit api

DataReadRequest readRequest = new DataReadRequest.Builder() 
    .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) 
    .bucketBySession(1, TimeUnit.MINUTES) 
    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
    .build(); 

DataReadResult dataReadResult = Fitness.HistoryApi 
    .readData(googleApiClient, readRequest) 
    .await(1, TimeUnit.MINUTES); 

Результаты этого запроса предоставляет список мероприятий с указанием времени начала и продолжительности этой деятельности. Это именно то, чего я ожидаю, но по какой-то причине он не возвращает данные, которые автоматически записываются приложением Google. Это, кажется, возвращает только элементы, которые подпадают под действие одного из этих условий:

  • активность вручную записанном от пригонки интерфейса Google
  • «сеанс» был записан с использованием Sessions API
  • активность вручную добавлены с помощью истории API (не проверял это, но это мое предположение)

Вопрос

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

ответ

1

Вы настроили подписку на пассивную сохранность данных? Вот как это делается:

Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_ACTIVITY_SEGMENT) 
    .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      if (status.isSuccess()) { 
       if (status.getStatusCode() 
         == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) { 
        Log.i(TAG, "Existing subscription for activity detected."); 
       } else { 
        Log.i(TAG, "Successfully subscribed!"); 
       } 
      } else { 
       Log.i(TAG, "There was a problem subscribing."); 
      } 
     } 
}); 
+0

hmm .. да, я пробовал это, и по какой-то причине я все еще не могу получить данные. Мое предположение заключалось в том, что я получаю данные о ходьбе/беге/велосипеде из точки i, которую я активировал и переправлял. – justyn

0

Я получаю данные сегмента активности просто отлично. Мой запрос на чтение отличается от вашего, поэтому я скопировал ваш и прочитал данные за неделю и не получил никаких наборов данных. На прошлой неделе я не вручную вставлял какие-либо сеансы данных. Я убежден, что ваша проблема связана с bucketBySession. Я побежал 3 тестов, каждый DataReadRequest описанный ниже предполагая диапазон времени также устанавливается (1 неделя для меня):

  1. read(DataType.TYPE_ACTIVITY_SEGMENT); нет агрегирования, без балансировки. Результат: Хорошие данные.
  2. aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) с bucketBySession(1, TimeUnit.MINUTES). Результат: Нет наборов данных или ковшей.
  3. aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) с bucketByTime(1, TimeUnit.DAYS). Результат: Хорошие данные

На мой взгляд bucketBySession documentation не очень понятно, что это будет исключительно возвращать данные, которые являются частью Session, но это, кажется, объяснить результаты из моих 3-х тестов, а также ваш список условий, которые вы заметили.

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

Смежные вопросы