2015-12-14 3 views
0

Я хочу добавить тренировки моего приложения в Google. Так что я попытался с завитками тренировки сейчас, как и в официальном примере ... мой код:Google Fit insert TYPE_WORKOUT_EXERCISE в Android

// 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. Я пробовал с другими видами тренировок, такими как Planks, с тем же результатом. Однако добавление количества шагов работает, как в официальном примере вставки в истории, поэтому я думаю, что у меня что-то связано с типом тренировки. Любые подсказки?

ответ

2

Насколько я знаю, Google fit не показывает упражнения для тренировки. Если вы хотите его показать, вы показываете, что вы добавляете активность в google, подходящую для типа данных TYPE_Activity_SAMPLE или TYPE _ACTIVITY_SEGMENT. WorkoutExercise - это отличный класс для добавления только упражнений. Если вам нужно добавить упражнение, которое определяется в разделе FitnessActivities. Вы должны его использовать, и оно также будет отображаться в приложении Google для вашего приложения.

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); 
} 
Смежные вопросы