2016-06-14 2 views
5

Итак, я пытаюсь создать приложение, которое подключается к Google Fit, и показывает пользователю их данные довольно обтекаемым способом, и у меня возникают проблемы с поиском калорий, которые пользователь сжег для каждый отдельный актив в день. Я могу получить общее количество калорий в течение всего дня, и каждое действие, которое каждый пользователь делает каждый день, но не калории, сжигаемые для каждого вида деятельности.Google Fit API, сжигание калорий за активность

Ссылка на GitHub: https://github.com/drb56/FitTest Я добавил код java, а не какой-либо материал xml. Код Google Fit находится в FitTestFragment.java. Я вставить некоторый код ключа вниз ниже:

Вот где я подключиться к Google Fit для клиента API:

mClient = new GoogleApiClient.Builder(getContext()) 
      .addApi(Fitness.HISTORY_API) 
      .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ)) 
      .addConnectionCallbacks(this) 
      .enableAutoManage(getActivity(), 0, new GoogleApiClient.OnConnectionFailedListener() { 
      @Override 
      public void onConnectionFailed(ConnectionResult result) { 
       Log.i("MyApp", "Google Play services connection failed. Cause: " + 
         result.toString()); 
     }}) 
     .build(); 

Вот где я сделать DataReadRequest для конкретной информации:

DataReadRequest readRequest = new DataReadRequest.Builder() 
         .aggregate(DataType.TYPE_CALORIES_EXPENDED,  DataType.AGGREGATE_CALORIES_EXPENDED) 
         .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) 
         .bucketByTime(1, TimeUnit.DAYS) 
         .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
         .build(); 

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


    if (dataReadResult.getBuckets().size() > 0) 
    { 
     Log.i("MyApp", "Number of returned buckets of DataSets is: " 
       + dataReadResult.getBuckets().size()); 
     for (Bucket bucket : dataReadResult.getBuckets()) 
     { 
      List<DataSet> dataSets = bucket.getDataSets(); 
        for (DataSet dataSet : dataSets) 
        { 
         dumpDataSet(dataSet); 
        } 
       } 
      } 
      else 
      { 
       Log.i("MyApp", "No data"); 
      } 

Вот как выглядит мой вывод для некоторых видов деятельности и расходуемых калорий:

Data point: 
    Type: com.google.calories.expended 
    Date: 06/09/2016 
    Start: 2:58:13 PM 
    End: 2:58:13 PM 
    Field: calories Value: 2555.9749 
Data point: 
    Type: com.google.activity.summary 
    Date: 06/09/2016 
    Start: 2:58:13 PM 
    End: 2:58:13 PM 
    Field: activity Value: 3 
    Field: duration Value: 76513626 
    Field: num_segments Value: 17 
Data point: 
    Type: com.google.activity.summary 
    Date: 06/09/2016 
    Start: 4:13:58 PM 
    End: 12:41:04 PM 
    Field: activity Value: 7 
    Field: duration Value: 4553146 
    Field: num_segments Value: 17 
+0

Проверьте этот блог для тех, кому нужна полная калория, сжигаемая http://www.gadgetsaint.com/android/google-fit-steps-calories-android/#.WESRX6J97BJ – ASP

ответ

0

Вам необходимо работать с Fitness.SESSIONS_API, а не Fitness.HISTORY_API. Sessions представляют собой временной интервал, в течение которого пользователи выполняют фитнес-активность.

2

Вы можете получить калории для различных мероприятий на каждый день, используя следующий код

DataReadRequest readRequest = new DataReadRequest.Builder() 
      .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED) 
      .bucketByActivityType(1, TimeUnit.SECONDS) 
      .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
      .build(); 

Вы можете запустить этот код в цикле, чтобы получить данные стольких дней, сколько вы хотите. Она возвращает ведра данных для всех видов деятельности, и вы можете получить имя активности из ведра с помощью этого метода, который возвращает имя деятельности в качестве строки

bucket.getActivity(); 

хранить его в пользовательской коллекции, и вы хорошо идти. Надеюсь, поможет! :)

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