2015-11-16 58 views
0

我在我的應用程序中使用Google健康工具包。我知道健康套件不直接提供傳感器步數。我閱讀谷歌適合的文檔我發現我們可以使用記錄API作爲背景中的步數。因此,如果可以使用Recording api和Sensor api要在後臺獲取步驟計數,請告訴我如何實現此目的。我想要了解用戶活動以及用戶在該活動期間在後臺執行的步驟。任何幫助,將不勝感激 。使用谷歌健身傳感器的步數

按照谷歌的文檔,適合如果我的申請認購記錄的數據類型,那麼它會記錄該類型的數據,並將其存儲到HISTORYAPI即使我的應用程序沒有運行。這是訂閱代碼

Fitness.RecordingApi.subscribe(fitnessClient, DataType.TYPE_ACTIVITY_SAMPLE) 
    .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      if (status.isSuccess()) { 
       if (status.getStatusCode() 
         == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) { 
        Log.e(TAG, "Existing subscription for activity detected."); 
       } else { 
        Log.e(TAG, "Successfully subscribed activity !"); 
       } 
      } else { 
       Log.e(TAG, "There was a problem subscribing."); 
      } 
     } 
    }); 


Fitness.RecordingApi.subscribe(fitnessClient,DataType.TYPE_STEP_COUNT_DELTA). 
     setResultCallback(new ResultCallback<Status>() { 

      @Override 
      public void onResult(Status arg0) { 
       if(arg0.isSuccess()){ 
        Log.e("Steps Recording","Subcribe"); 
       } 
      } 
     }); 

現在我已訂閱的步驟和活動。但直到現在它還沒有感覺到任何東西。任何人都可以解釋訂閱記錄數據類型的目的是什麼。

+0

這可能會幫助一些http://www.gadgetsaint.com/android/update-calories -steps,谷歌配合-API /#。WPFGK1N97BI – ASP

回答

0

我剛剛google了一下google fit API,看來傳感器API是用來從傳感器獲取數據的,比如用戶的心率,Recording api用來收集數據,比如用戶運行時的地理位置數據是,並且歷史api用於編輯記錄數據。所記錄的數據是通過谷歌在後臺收集的,這些數據可以存儲在雲端,但是這些數據存儲在本地設備中,還是將這些數據存儲在本地設備中?我沒有看到任何有關它的信息,在你的代碼中我也沒有看到它。我沒有使用谷歌適合的API做任何項目,對不起,不能幫助更多。

+0

請再次檢查問題..我已更新 – ADM

+0

我編輯了我的答案,對不起,我幫不了你。 – panda

+0

好吧Thx爲你的時間兄弟無論如何.. – ADM

0

我知道這是一個老問題,但我需要幫助這個太,所以我會盡力幫助:

你的活動需要實現這一點:

implements NavigationView.OnNavigationItemSelectedListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener

創建此之前的onCreate變量:public GoogleApiClient mGoogleApiClient = null;

裏面的onCreate這樣寫:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Fitness.HISTORY_API) 
       .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
       .addConnectionCallbacks(this) 
       .enableAutoManage(this, 0, this) 
       .build(); 

不要忘記OAuth身份驗證。

然後,你需要這樣的方法:

public void onConnected(@Nullable Bundle bundle) { 
     Log.e("HistoryAPI", "onConnected"); 
    } 
@Override 
    public void onConnectionSuspended(int i) { 
     Log.e("HistoryAPI", "onConnectionSuspended"); 
    } 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Log.e("HistoryAPI", "onConnectionFailed"); 
} 


public void onClick(View v) { 

} 

在此之後,您將創建這個方法,讀步進計數器(谷歌飛度API盡數)

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

這是是showDataSet裏面displayStepDataForToday()

private void showDataSet(DataSet dataSet) { 
     Log.e("History", "Data returned for Data type: " + dataSet.getDataType().getName()); 
     DateFormat dateFormat = DateFormat.getDateInstance(); 
     DateFormat timeFormat = DateFormat.getTimeInstance(); 

     for (DataPoint dp : dataSet.getDataPoints()) { 
      Log.e("History", "Data point:"); 
      Log.e("History", "\tType: " + dp.getDataType().getName()); 
      Log.e("History", "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS))); 
      Log.e("History", "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS))); 
      for(Field field : dp.getDataType().getFields()) { 
       Log.e("History", "\tField: " + field.getName() + 
         " Value: " + dp.getValue(field)); 
       //writeToFile(dp.getValue(field).asInt()); 
       //this is how I save the data (wit the writeToFile) 
      } 
     } 

    } 

最後你需要創建一個類(在你的內部活動)使用displayStepDataForToday()方法

public class ViewTodaysStepCountTask extends AsyncTask<Void, Void, Void> { 
     protected Void doInBackground(Void... params) { 
      displayStepDataForToday(); 
      return null; 
     } 
    } 

你只需要當你要開始活動,然後得到它的值。這將在後臺運行並根據需要進行更新。如果你想這個代碼更新快,你可以做一些研究,但我認爲你需要改變這一行:

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