Google Fitは、Googleが提供しているスマホ・スマートフォン用の健康管理アプリ(プラットフォーム)です。
アプリは、Google Fitと連携することで、ユーザーの健康情報(歩数など)を取得可能です。
Google Fitとアプリを連携する手順は、スタートガイドに書かれています。
主な手順は以下となります。
-
Googleアカウントを取得する
(Androidアプリを作っているなら取得済みかと思います。) - GooglePlayサービスを利用する
AndroidStudioのSDK ManagerをGooglePlayサービスを追加します。 - OAuth2.0クライアントIDを取得する
Google API ConsoleでクライアントIDを取得します。
ここの手順は、複雑ですので「get an OAuth 2.0 Client ID」を読みながら進める必要があります。 - プロジェクトを作成して構成する
AndroidStudioで開発するアプリのプロジェクトを作成します。 - GooglePlayサービスクライアントライブラリを追加する
アプリの「build.gradle」に以下を追加します。
implementation 'com.google.android.gms:play-services-fitness:20.0.0'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
アプリのコード(java)は以下のようになります。 ※Permissionの許可にAndroid-Permissionsを使っています。
以下のようにして、GoogleFitのアクセス権を得ます。
final int REQUEST_OAUTH_REQUEST_CODE = 1001;
@Override
protected void onResume() {
super.onResume();
final Activity activity = this;
//Manifest.permission.ACTIVITY_RECOGNITIONを権限を取得する
Permissions.check(this/*context*/, Manifest.permission.ACTIVITY_RECOGNITION, null, new PermissionHandler() {
@Override
public void onGranted() {
//取得するデータをセットする
final FitnessOptions fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.TYPE_STEP_COUNT_DELTA)
.addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE)
.addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA)
.build();
//Google Fitのアクセス権を取得する
if (!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(activity), fitnessOptions)) {
GoogleSignIn.requestPermissions(
activity,
REQUEST_OAUTH_REQUEST_CODE,
GoogleSignIn.getLastSignedInAccount(activity),
fitnessOptions
);
} else {
//アクセス権がある場合は、データを取得する
readData();
}
}
});
}
データの取得はいかように行います。
// LogCatにデータを出力する
private void dumpDataSet(DataSet dataSet) {
Log.d(TAG, "Data type: " + dataSet.getDataType().getName());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
Log.d(TAG, "Data point count = " + dataSet.getDataPoints().size());
for (DataPoint dp : dataSet.getDataPoints()) {
long dpStart = dp.getStartTime(TimeUnit.MILLISECONDS);
long dpEnd = dp.getEndTime(TimeUnit.MILLISECONDS);
Log.v(TAG, String.format("Data point: Type:%s, Start%s, End:%s", dp.getDataType().getName(), dateFormat.format(dpStart), dateFormat.format(dpEnd)));
for(Field field : dp.getDataType().getFields()) {
String fieldName = field.getName();
Log.v(TAG, "Field: " + fieldName + " Value: " + dp.getValue(field));
}
}
}
private void readData() {
//取得データの範囲を指定します。
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -1);
long end = calendar.getTimeInMillis();
calendar.add(Calendar.YEAR, -2);
long start = calendar.getTimeInMillis();
//取得リクエストを作成します。
DataReadRequest request = new DataReadRequest.Builder()
.setTimeRange(start, end, TimeUnit.MILLISECONDS)
.read(DataType.TYPE_STEP_COUNT_CUMULATIVE)
.build();
//取得要求を行います。
Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
.readData(request)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(DataReadResponse dataReadResponse) {
Log.v(TAG, "onSuccess : " + dataReadResponse.toString());
if (dataReadResponse.getBuckets().size() > 0) {
for (Bucket bucket : dataReadResponse.getBuckets()) {
List dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
dumpDataSet(dataSet);
}
} }
else{
for(DataSet dataSet :dataReadResponse.getDataSets()){
dumpDataSet(dataSet);
}
}
}
});
}
GoogleFitを利用するには、スマートウォッチがあると便利なようです。

0 件のコメント :
コメントを投稿