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 件のコメント :
コメントを投稿