1

アプリのワークアウトを Google Fit に追加したいと考えています。だから私は公式の例のように今のところカールのワークアウトを試してみました...私のコードは次のとおりです:

// Create a data source
        DataSource dataSource = new DataSource.Builder()
                .setAppPackageName(this)
                .setDataType(DataType.TYPE_WORKOUT_EXERCISE)
                .setName(getResources().getString(R.string.app_name))
                .setType(DataSource.TYPE_RAW)
                .build();

//        // Create a data set
        DataSet dataSet = DataSet.create(dataSource);
        DataPoint curls = DataPoint.create(dataSource);
        curls.setTimestamp(now.getTime(), TimeUnit.MILLISECONDS);
        curls.getValue(Field.FIELD_EXERCISE).setString(WorkoutExercises.BICEP_CURL);
        curls.getValue(Field.FIELD_DURATION).setInt(30000);
        curls.getValue(Field.FIELD_REPETITIONS).setInt(10);
        curls.getValue(Field.FIELD_RESISTANCE_TYPE).setInt(Field.RESISTANCE_TYPE_DUMBBELL);
        curls.getValue(Field.FIELD_RESISTANCE).setFloat(20.0f);
        dataSet.add(curls);

Fitness.HistoryApi.insertData(mClient, dataSet)
                .setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        if (status.isSuccess()) {
                            Log.i(TAG, "Data insert was successful!");
                        } else {
                            // The deletion will fail if the requesting app tries to delete data
                            // that it did not insert.
                            Log.i(TAG, "There was a problem inserting the dataset.");
                            //TODO store dataset to send it later or make this as a service
                        }
                    }
                });

問題は、挿入メソッドが成功をログに記録することですが、Google Fit にデータが追加されていないことがわかります。プランクなど、他のタイプのトレーニングでも試してみましたが、同じ結果が得られました。ただし、歴史の例の公式の挿入のように、歩数の追加は機能するので、タイプのワークアウトに関連する何かが欠けていると思います。手がかりはありますか?

4

1 に答える 1

3

私が知っている限り、Google フィットはワークアウトのエクササイズを表示しません。表示したい場合は、アクティビティを TYPE_Activity_SAMPLE または TYPE_ACTIVITY_SEGMENT データ型で Google に追加してください。WorkoutExercise は別のクラスで、Exercises のみを追加するためのものです。FitnessActivities の下で定義されている運動を追加する必要がある場合は、それを使用する必要があります。また、アプリケーション名で Google Fit アプリにも表示されます。

public void insertFitnessActivity(ExerciseBean bean) {

    /*
     * Distance Data source
     */ 
    DataSource distance = new DataSource.Builder()
            .setAppPackageName(context)
            .setDataType(DataType.TYPE_DISTANCE_DELTA)
            .setType(DataSource.TYPE_RAW).build();
    DataSet distanceDataSet = DataSet.create(distance);
    DataPoint distanceDataPoint = DataPoint.create(distance)
            .setTimeInterval(bean.getStartTime(), bean.getEndTime(),
                    TimeUnit.MILLISECONDS);
    distanceDataPoint.getValue(Field.FIELD_DISTANCE).setFloat((float) bean.getEx_distance());
    distanceDataSet.add(distanceDataPoint);
    com.google.android.gms.common.api.Status distanceInsertStatus = Fitness.HistoryApi
            .insertData(fitnessClient, distanceDataSet).await(1, TimeUnit.MINUTES);

    /*
     * Steps Data source
     */
    DataSource steps = new DataSource.Builder()
            .setAppPackageName("package")
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_RAW).build();
    DataSet stepsDataSet = DataSet.create(steps);
    DataPoint stepsDataPoint = DataPoint.create(steps).setTimeInterval(
            bean.getStartTime(), bean.getEndTime(), TimeUnit.MILLISECONDS);
    stepsDataPoint.getValue(Field.FIELD_STEPS).setInt(bean.getSteps());
    stepsDataSet.add(stepsDataPoint);
    com.google.android.gms.common.api.Status statusInsert = Fitness.HistoryApi
            .insertData(fitnessClient, stepsDataSet).await(1, TimeUnit.MINUTES);

    /*
     * Calory Data source
     */
    DataSource calory = new DataSource.Builder()
            .setAppPackageName("package")
            .setDataType(DataType.TYPE_CALORIES_EXPENDED)
            .setType(DataSource.TYPE_RAW).build();
    DataSet calDataSet = DataSet.create(calory);
    DataPoint calDataPoint = DataPoint.create(calory).setTimeInterval(
            bean.getStartTime(), bean.getEndTime(), TimeUnit.MILLISECONDS);
    // calDataPoint.setFloatValues((float)bean.getEx_calories());
    calDataPoint.getValue(Field.FIELD_CALORIES).setFloat(
            (float) bean.getEx_calories());
    calDataSet.add(calDataPoint);

    com.google.android.gms.common.api.Status insertStatus = Fitness.HistoryApi
            .insertData(fitnessClient, calDataSet).await(1, TimeUnit.MINUTES);

    /*
     * Activity data source
     */
    DataSource acSource = new DataSource.Builder()
            .setAppPackageName(context)
            .setDataType(DataType.TYPE_ACTIVITY_SEGMENT)
            .setType(DataSource.TYPE_RAW).build();
    DataSet dataSet = DataSet.create(acSource);
    DataPoint dataPoint = DataPoint.create(acSource).setTimeInterval(
            bean.getStartTime(), bean.getEndTime(), TimeUnit.MILLISECONDS);
    dataPoint.getValue(Field.FIELD_ACTIVITY).setActivity(bean.getEx_Name());
    dataSet.add(dataPoint);

    com.google.android.gms.common.api.Status status = Fitness.HistoryApi
            .insertData(fitnessClient, dataSet).await(1, TimeUnit.MINUTES);
}
于 2015-12-21T06:31:12.703 に答える