2016-06-14 10 views
5

Quindi sto provando a creare un'app che si connette a Google Fit e mostra all'utente i propri dati in modo abbastanza semplificato e ho difficoltà a trovare le calorie bruciate dall'utente per ogni singola attività al giorno. Posso ottenere le calorie totali per l'intera giornata e ogni attività che l'utente ha fatto ogni giorno, ma non le calorie bruciate per ogni attività.API Google Fit, ottenendo le calorie bruciate per attività

Collegamento a GitHub: https://github.com/drb56/FitTest Ho solo aggiunto il codice Java non una qualsiasi delle cose xml. E il codice di Google Fit si trova in FitTestFragment.java. Io incollo un certo codice tasto in basso:

Ecco dove mi collego al Google Fit client 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(); 

Ecco dove faccio la DataReadRequest per informazioni specifiche:

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"); 
      } 

Ecco come appare il mio output per alcune attività e calorie spesi:

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

Controlla questo blog per chi ha bisogno di calorie bruciate http://www.gadgetsaint.com/android/google-fit-steps-calories-android/#.WESRX6J97BJ – ASP

risposta

0

È necessario lavorare con Fitness.SESSIONS_API, anziché Fitness.HISTORY_API. Sessions rappresentano un intervallo di tempo durante il quale gli utenti eseguono un'attività di fitness.

2

è possibile ottenere calorie per varie attività per ogni giorno utilizzando il seguente codice

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

È possibile eseguire questo codice in un ciclo per ottenere i dati per il maggior numero di giorni che si desidera. Si tornerà secchi di dati per tutte le attività e si può scaricare nome dell'attività dal secchio con questo metodo che restituisce nome dell'attività as String

bucket.getActivity(); 

Conservarlo in una raccolta personalizzata e siete a posto. Spero che sia d'aiuto! :)