Как вставить упражнения в Google Fit с именем, калориями и продолжительностью - PullRequest
0 голосов
/ 25 июня 2018

Мое приложение имеет сотни различных упражнений, доступных в базе данных.Пользователи могут добавлять их в свой дневник со следующими данными:

  • название вида деятельности, например, рыбалка, футбол и т. Д.
  • продолжительность упражнения
  • сожженные калории

Когда это будет сделано, я также хочу, чтобы эти данные перешли в Google Fit и отображались как упражнение / тренировка.

В настоящее время я добавляю сеансы в API сеансов следующим образом:

    //1 ACTIVITY DATASOURCE
    DataSource activityDataSource = new DataSource.Builder()
            .setAppPackageName(context.getPackageName())
            .setDataType(DataType.TYPE_ACTIVITY_SEGMENT)
            .setName(exercisename + " - activity")
            .setType(DataSource.TYPE_RAW)
            .build();

    //2 CALORIES DATASOURCE
    DataSource sourceKcal = new DataSource.Builder()
            .setAppPackageName(context.getPackageName())
            .setDataType(DataType.TYPE_CALORIES_EXPENDED)
            .setName(exercisename + " - calories")
            .setType(DataSource.TYPE_RAW)
            .build();

    //3 EXERCISE DATASOURCE
    DataSource sourceExercise = new DataSource.Builder()
            .setAppPackageName(context.getPackageName())
            .setDataType(DataType.TYPE_WORKOUT_EXERCISE)
            .setName(exercisename + " - workout")
            .setType(DataSource.TYPE_RAW)
            .build();


    DataSet activityDataSet = DataSet.create(activityDataSource);
    DataPoint dataPoint = activityDataSet.createDataPoint().setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
    dataPoint.getValue(Field.FIELD_ACTIVITY).setActivity(FitnessActivities.OTHER);
    activityDataSet.add(dataPoint);

    DataSet kcalDataset = DataSet.create(sourceKcal);
    DataPoint kcalDatapoint = kcalDataset.createDataPoint().setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
    kcalDatapoint.getValue(Field.FIELD_CALORIES).setFloat(kcal);
    kcalDataset.add(kcalDatapoint);

    DataSet exerciseDataSet = DataSet.create(sourceExercise);
    DataPoint exerciseDataPoint = exerciseDataSet.createDataPoint().setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
    exerciseDataPoint.getValue(Field.FIELD_DURATION).setInt(mins);
    exerciseDataPoint.getValue(Field.FIELD_EXERCISE).setString(exercisename);
    exerciseDataSet.add(exerciseDataPoint);


        // Build a session insert request
    Session session = new Session.Builder()
            .setName(exercisename)
            .setDescription("My Exercise Session")
            .setActivity(FitnessActivities.OTHER)
            .setIdentifier(UUID.randomUUID().toString())
            .setStartTime(startTime, TimeUnit.MILLISECONDS)
            .setEndTime(endTime, TimeUnit.MILLISECONDS)
            .build();

    return new SessionInsertRequest.Builder()
            .setSession(session)
            .addDataSet(activityDataSet)
            .addDataSet(kcalDataset)
            .addDataSet(exerciseDataSet)
            .build();

Fitness.getSessionsClient(context, GoogleSignIn.getLastSignedInAccount(context))
            .insertSession(insertRequest)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    // At this point, the session has been inserted and can be read.
                    Logger.d(TAG + "Speed Session insert was successful!");
                    Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show();
                    verifySession();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Logger.d(TAG + "There was a problem inserting the Speed session: " + e.getLocalizedMessage());
                    Toast.makeText(context, "Fail", Toast.LENGTH_SHORT).show();
                }
            });

Мое добавленное упражнение появляется в приложении Google Fit с моим произвольным именем и продолжительностью, однако выбранное для него значение калорий не отображается.

Спасибо

...