2016-06-14 8 views
5

Also versuche ich eine App zu erstellen, die eine Verbindung zu Google Fit herstellt und dem Nutzer seine Daten auf sehr einfache Weise anzeigt, und ich habe Probleme, die verbrannten Kalorien zu finden jede einzelne Aktivität pro Tag. Ich kann die Gesamtkalorien für den ganzen Tag, und jede Aktivität, die der Benutzer jeden Tag tat, aber nicht die Kalorien für jede Aktivität verbrannt.Google Fit API, Kalorienverbrauch je Aktivität

Link zu GitHub: https://github.com/drb56/FitTest Ich habe nur den Java-Code nicht irgendwelche der XML-Zeug hinzugefügt. Und der Google Fit-Code befindet sich in FitTestFragment.java. Ich werde einigen Schlüsselcode einfügen unten:

Hier ist, wo ich auf den Google Fit-API-Client verbinden:

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(); 

Hier ist, wo ich die DataReadRequest für spezifische Informationen machen:

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

Hier ist, wie meine Ausgabe für einige Aktivitäten und Kalorien verbraucht aussieht:

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

Überprüfen Sie diesen Blog für jeden, der Kalorienverbrauch verbrannt http://www.gadgetsaint.com/android/google-fit-steps-calories-android/#.WESRX6J97BJ – ASP

Antwort

0

Sie müssen mit Fitness.SESSIONS_API anstelle von Fitness.HISTORY_API arbeiten. Sessions stellen ein Zeitintervall dar, in dem Benutzer eine Fitnessaktivität ausführen.

2

Sie können für jeden Tag Kalorien für verschiedene Aktivitäten erhalten, indem Sie den folgenden Code verwenden

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

Sie diesen Code in einer Schleife laufen kann Daten für so viele Tage zu erhalten, wie Sie wollen. Es werden die Daten Eimer für alle Aktivitäten zurückkehren und Sie können mit dieser Methode Aktivitätsnamen aus dem Eimer holen, die Aktivität Namen als String zurückgibt

bucket.getActivity(); 

Bewahren Sie es in einer benutzerdefinierten Sammlung und Sie sind gut zu gehen. Ich hoffe es hilft! :)