Sensors APIを使って利用可能なデータソースの一覧を取得する

ツイート このエントリーをはてなブックマークに追加
1つ上へ / ブログトップへ

センサーなどから生のデータを取得するため、まず利用可能なセンサーの一覧(データソース)を取得しましょう。Google Fit APIのFitness.SensorsApi.findDataSources()を呼ぶと非同期で利用可能なデータソースの一覧が取得できます。(とはいえ、N5で試してみたんですが0件とでる。。。)

void listDataSources() {
  // リクエストを作る
  // 歩数の差分を取得するセンサー一覧
  DataSourcesRequest req = new DataSourcesRequest.Builder()
    .setDataSourceTypes(DataSource.TYPE_RAW)
    .setDataTypes(DataTypes.STEP_COUNT_DELTA)
    .build();

  // Sensors APIを呼ぶ
  PendingResult<DataSourcesResult> pendingResult =
    Fitness.SensorsApi.findDataSources(mApiClient, req);

  addMessage("getting available data sources");
  // 結果を非同期で受け取る。どうもこれ呼んだ時点でリクエストが飛ぶみたい
  pendingResult.setResultCallback(new ResultCallback<DataSourcesResult>() {
    @Override
    public void onResult(DataSourcesResult dataSourcesResult) {
      List<DataSource> dataSources = dataSourcesResult.getDataSources();
      addMessage("count of data sources : " + dataSources.size());
      for (DataSource ds : dataSources) {
        String dsName = ds.getName();
        Device device = ds.getDevice();
        addMessage("Name:" + dsName + " device=" + device.getUid());
      }
    }
  });
}

1つずつ見てみましょう。

DataSourcesRequest req = new DataSourcesRequest.Builder()
  .setDataSourceTypes(DataSource.TYPE_RAW)
  .setDataTypes(DataTypes.STEP_COUNT_DELTA)
  .build();

データソースの種類と、データの種類を指定します。

データソースの種類は次の2種類が指定できるようです。

  • DataSource.TYPE_RAW
  • DataSource.TYPE_DERIVED

データの種類は次の種類が指定できるようです。

  • DataTypes.ACTIVITY_EDGE
  • DataTypes.ACTIVITY_SAMPLE
  • DataTypes.ACTIVITY_SEGMENT
  • DataTypes.ACTIVITY_SUMMARY
  • DataTypes.CALORIES_EXPENDED
  • DataTypes.CYCLING_PEDALING_CADENCE
  • DataTypes.CYCLING_PEDALING_CUMULATIVE
  • DataTypes.CYCLING_WHEEL_REVOLUTION
  • DataTypes.CYCLING_WHEEL_RPM
  • DataTypes.DISTANCE_CUMULATIVE
  • DataTypes.DISTANCE_DELTA
  • DataTypes.HEART_RATE_BPM
  • DataTypes.HEART_RATE_SUMMARY
  • DataTypes.HEIGHT
  • DataTypes.LOCATION
  • DataTypes.LOCATION_BOUNDING_BOX
  • DataTypes.POWER_SAMPLE
  • DataTypes.SPEED
  • DataTypes.SPEED_SUMMARY
  • DataTypes.STEP_COUNT_CADENCE
  • DataTypes.STEP_COUNT_CUMULATIVE
  • DataTypes.STEP_COUNT_DELTA
  • DataTypes.WEIGHT
  • DataTypes.WEIGHT_SUMMARY
PendingResult<DataSourcesResult> pendingResult =
  Fitness.SensorsApi.findDataSources(mApiClient, req);

先ほど作成したリクエストオブジェクトと、GoogleAPIClientを渡して実際にAPIを呼ぶ準備をします。pendingとあるので実際に投げるのはもう少し後。

pendingResult.setResultCallback(new ResultCallback<DataSourcesResult>() {
  @Override
  public void onResult(DataSourcesResult dataSourcesResult) {
    List<DataSource> dataSources = dataSourcesResult.getDataSources();
    addMessage("count of data sources : " + dataSources.size());
    for (DataSource ds : dataSources) {
      String dsName = ds.getName();
      Device device = ds.getDevice();
      addMessage("Name:" + dsName + " device=" + device.getUid());
    }
  }
});

結果取得後のCallbackを指定し、リクエストを投げます。

1つ上へ / ブログトップへ