2015-06-13 34 views
1

這可能是一個新手問題,但我已經失去了一天的時間來弄清楚不成功。 我正在使用Google Fit API進入我的Android應用程序,並且需要顯示一些數據,例如跑步和走每日步驟。我設法顯示數據,但以時間單位(f.e運行x分鐘)。我需要逐步顯示它。如何從Google Fit API檢索每日跑步和步行步驟

以下代碼中的剪斷顯示瞭如何檢索爲時間單位(毫秒)數據:

DataReadRequest readRequest = new DataReadRequest.Builder() 
      .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) 
      .bucketByTime(1, TimeUnit.DAYS) 
      .setTimeRange(start, end, TimeUnit.MILLISECONDS) 
      .build(); 


    Fitness.HistoryApi.readData(client, readRequest).setResultCallback(new ResultCallback<DataReadResult>() { 
     @Override 
     public void onResult(DataReadResult dataReadResult) { 
      if (dataReadResult.getBuckets().size() > 0) { 
       display.show("Bucket DataSet.size(): " 
         + dataReadResult.getBuckets().size()); 
       retrieveHistoryData(dataReadResult, client.getContext()); 
      } 
     } 

          ..... 

    private void retrieveHistoryData(DataReadResult dataReadResult, Context context) { 

    int walking = 0; 
    int running = 0; 
    int biking = 0; 

    for (Bucket bucket : dataReadResult.getBuckets()) { 
     List<DataSet> dataSets = bucket.getDataSets(); 
     for (DataSet dataSet : dataSets) { 
      display.show("dataSet.dataType: " + dataSet.getDataType().getName()); 
      for (DataPoint dp : dataSet.getDataPoints()) { 
       walking += getBucketData(dp, FitnessActivities.WALKING); 
       running += getBucketData(dp, FitnessActivities.RUNNING); 
       biking += getBucketData(dp, FitnessActivities.BIKING); 
      } 
     } 
    } 

    Log.d(TAG, Constants.KEY_WALKING_STEPS + ": " + walking); 
    Log.d(TAG, Constants.KEY_RUNNING_STEPS + ": " + running); 
    Log.d(TAG, Constants.KEY_BIKING_STEPS + ": " + biking); 
} 

private int getBucketData(DataPoint dp, String activityName) { 
    int count = 0; 
    for (Field field : dp.getDataType().getFields()) { 
     Log.d(TAG, "Field " + field.getName() + " " + FitnessActivities.getName(dp.getValue(field).asInt()) + " = " + dp.getValue(field).asInt() + " field.describeContents()" + field.describeContents()); 
     if ("activity".equals(field.getName()) && activityName.contentEquals(FitnessActivities.getName(dp.getValue(field).asInt()))) { 
      count += dp.getValue(field).asInt(); 

     } 
    } 
    return count; 
} 

TNX提前。

問候

MB

+0

「例如,將TYPE_STEP_COUNT_DELTA數據類型傳遞給此方法以檢索每日總步驟。您可以傳入具有各自每日總計的實例數據類型。有關支持的數據類型的更多信息,請參閱[AGGREGATE_INPUT_TYPES](https://developers.google.com/android/reference/com/google/android/gms/fitness/data/DataType#AGGREGATE_INPUT_TYPES)。「 –

+0

Tnx快速回放。對不起,但我沒有看到符合我要求的任何類型。我需要跑步和步行活動每日數據顯示在步驟單位。就像在Google健身應用程序中一樣。 – MladenB

回答

0

您可以通過下面的代碼

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

其中ESTIMATED_STEP_DELTAS被定義爲

DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder() 
      .setDataType(DataType.TYPE_STEP_COUNT_DELTA) 
      .setType(DataSource.TYPE_DERIVED) 
      .setStreamName("estimated_steps") 
      .setAppPackageName("com.google.android.gms") 
      .build(); 

你獲得各種活動步驟的每一天可以在一個循環中運行此代碼以獲取與天數一樣多的數據你要。它會返回數據桶進行有步驟所涉及的所有活動,您可以從桶裏用這種方法返回活動名稱爲字符串

bucket.getActivity(); 

希望它可以幫助獲取活動名稱! :)

+0

對於問這個問題的實際人來說太遲了,但我希望它能幫助其他面臨類似問題的人。 :) –