センサーなどから生のデータを取得するため、まず利用可能なセンサーの一覧(データソース)を取得しましょう。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種類が指定できるようです。
データの種類は次の種類が指定できるようです。
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を指定し、リクエストを投げます。