Google Fit에 영양 데이터 등록(PFC)

전언


이는 작업개발 안드로이드 앱에서 영양 데이터를 구글 핏에 로그온해 처리할 때의 발자취를 구현한 것이다.
2018년 11월까지 구글핏 앱에서 확인할 수 있는 영양데이터는 PFC 데이터뿐이어서 이 3개+칼로리를 쓰기로 했다.
PFC= 단백질(Protein) 지방(Fat) 탄수화물(Carbs)

세그먼트 생성


Google API에 연결된 클라이언트를 만들 때 History API 및 FITNESS 사용NUTRITION_READ_Scape에 WRITE를 추가하면 영양가 데이터를 읽고 쓸 수 있습니다.
// クライアント作成
mClient = new GoogleApiClient.Builder(getApplicationContext())
        .addApi(Fitness.HISTORY_API)
        .addScope(new Scope(Scopes.FITNESS_NUTRITION_READ_WRITE))
        .addConnectionCallbacks(
                new GoogleApiClient.ConnectionCallbacks() {
                    @Override
                    public void onConnected(Bundle bundle) {
                        Timber.d("Connect OK");
                        startFitnessCooper();
                    }

                    @Override
                    public void onConnectionSuspended(int i) {
                        // If your connection to the sensor gets lost at some point,
                        // you'll be able to determine the reason and react to it here.
                        if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
                            Timber.i("Connection lost.  Cause: Network Lost");
                        } else if (i
                                == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
                            Timber.i("Connection lost.  Reason: Service Disconnected");
                        }
                        cleanFitnessClient();
                    }
                }
        )
        .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
            @Override
            public void onConnectionFailed(ConnectionResult result) {
                Timber.i("Google Play services connection failed. Cause: " + result.toString());
                cleanFitnessClient();
            }
        })
        .build();

// 接続
mClient.connect();

PFC 쓰기


PFC 데이터를 비동기식으로 쓰기 전에 준비합니다.
여기서는 NutritionEnity에 영양 데이터가 저장되어 있다고 가정합니다.
또 로그인 데이터에 이름을 붙여야 하기 때문에 연월일(ymd)를 먼저 사용한다.
private class InsertAndVerifyDataTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        // 栄養価をGoogleへ書き込む
        updateFitnessDataNutrition(mYmd, mRecordNutritionValueEntity);
        return null;
    }
}

private void updateFitnessDataNutrition(String ymd, NutritionEntity entity) {
    DataSource dataSource = new DataSource.Builder()
            .setAppPackageName(getPackageName())
            .setDataType(DataType.TYPE_NUTRITION)
            .setName(ymd)
            .setType(DataSource.TYPE_RAW)
            .build();

    DataPoint dataPoint = DataPoint.create(dataSource);
    dataPoint.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
    dataPoint.getValue(Field.FIELD_FOOD_ITEM).setString("Asken Diet"); // アプリ名などを記載しておくとgoogle fitアプリでデータ元みたいに表示される

    float calorie = entity.values.calorie.val;
    float protein = entity.values.protein.val;
    float fat = entity.values.fat.val;
    float carbs = entity.values.carbohydrate.val;

    // 摂取カロリー (kcal)
    dataPoint.getValue(Field.FIELD_NUTRIENTS).setKeyValue(Field.NUTRIENT_CALORIES, calorie);
    // タンパク質(g)
    dataPoint.getValue(Field.FIELD_NUTRIENTS).setKeyValue(Field.NUTRIENT_PROTEIN, protein);
    // 脂肪(g)
    dataPoint.getValue(Field.FIELD_NUTRIENTS).setKeyValue(Field.NUTRIENT_TOTAL_FAT, fat);
    // 炭水化物(g)
    dataPoint.getValue(Field.FIELD_NUTRIENTS).setKeyValue(Field.NUTRIENT_TOTAL_CARBS, carbs);

    DataSet dataSet = DataSet.create(dataSource);
    dataSet.add(dataPoint);

    DataUpdateRequest request = new DataUpdateRequest.Builder()
            .setDataSet(dataSet)
            .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    Status updateStatus = Fitness.HistoryApi.updateData(mClient, request).await(1, TimeUnit.MINUTES);
    if (!updateStatus.isSuccess()) {
        Timber.i("There was a problem inserting the dataset nutrition");
    }
}

또 손 옆에만 개발하면 칼로리를 쓰지 않으면 구글 핏 앱이 붕괴할 수 있다.

Google Fit 애플리케이션을 통해 등록 데이터 확인


영양 데이터 로그인이 정상적으로 완료되면 Google Fit 애플리케이션을 통해 PFC 데이터를 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기