2016-06-12 54 views
2

使用下面的代碼,我開始記錄值之後的累積步驟。但我只想顯示當天的步驟,而不是累計。在datapointListener中獲取當天的步驟Google Fit

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder() 
      .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE) 
      .setDataSourceTypes(DataSource.TYPE_RAW) 
      .build(); 

    ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() { 
     @Override 
     public void onResult(DataSourcesResult dataSourcesResult) { 
      for(DataSource dataSource : dataSourcesResult.getDataSources()) { 
       if(DataType.TYPE_STEP_COUNT_CUMULATIVE.equals(dataSource.getDataType())) { 
        registerStepsDataListener(dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE); 
       } 
      } 
     } 
    }; 

    Fitness.SensorsApi.findDataSources(googleApiClient, dataSourceRequest) 
      .setResultCallback(dataSourcesResultCallback); 

    Fitness.RecordingApi.subscribe(googleApiClient, DataType.TYPE_STEP_COUNT_DELTA) 
      .setResultCallback(subscribeResultCallback); 
} 

//onDataPointListener 
@Override 
public void onDataPoint(DataPoint dataPoint) { 
    for(final Field field : dataPoint.getDataType().getFields()) { 
     final Value value = dataPoint.getValue(field); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tvSteps.setText("Field: " + field.getName() + " Value: " + value.toString()); 
      } 
     }); 
    } 
} 

我試着更換dataType常量,但沒有奏效。在DataPointListener中使用History API調用readData方法失敗了。雖然你獲得了期望的產出,但它滯後很多,不應該做這樣的事情。

另一種方法是每天更改,我會在午夜獲取累積步驟的數據,然後將其存儲在SharedPreferences中。然後從累計顯示的onDatapoint中減去此數字。

但是有沒有比這更好的方法?

回答

1

從第2步基於:顯示數據今日在使用谷歌飛度歷史API,Google Fit for Android: History API提到有關:

一個普通用例的開發者是需要數據當天。幸運的是,谷歌通過添加Fitness.HistoryApi.readDailyTotal調用使這變得簡單,它創建了一個包含當天收集的數據的對象DailyTotalResult

它記錄了用戶對天邁

示例代碼:

private void displayStepDataForToday() { 
    DailyTotalResult result = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA).await(1, TimeUnit.MINUTES); 
    showDataSet(result.getTotal()); 
} 

您也可以嘗試在此SO後給出的解決方案 - How to get step count from Google Fit REST API like Google Fit app?。我希望這對你有用。

+0

但是這個方法需要從一個asynctask中調用。我試着在onDataPoint裏面調用asynctask。因此,每一步asynctask都會被調用。但這會導致數據在人停止行走之前不會顯示。數據顯示非常間歇。 – suku

0
  1. 檢測應用程序是否第一次打開。如果爲true,則將第一次顯示的步驟值存儲在onDataPoint方法中。此步驟數據中包含以前通過Google配合記錄的步驟信息(通過其他應用或Google合適本身)。將該值存儲在共享首選項中。
  2. 然後從顯示的當前步驟中減去存儲的步驟。這等於當前的幾天步驟。 //日常使用
  3. 檢測自上次打開應用程序以來是否發生了變化。
  4. 如果是這樣,那麼請使用googlefit的readData API在1天的時間段內完成步驟。
  5. 將這些步驟添加到存儲的步驟。因此,存儲的步驟將隨前一天的步驟值遞增。
  6. 在onDataPoint中從步驟值中減去存儲的步驟值。

注意:您必須說明應用程序未被打開幾天。 Google fit仍應記錄這些步驟。存儲的步驟應該合計應用程序未打開的所有日子的步驟。

相關問題