Мое приложение имеет сотни различных упражнений, доступных в базе данных.Пользователи могут добавлять их в свой дневник со следующими данными:
- название вида деятельности, например, рыбалка, футбол и т. Д.
- продолжительность упражнения
- сожженные калории
Когда это будет сделано, я также хочу, чтобы эти данные перешли в 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 с моим произвольным именем и продолжительностью, однако выбранное для него значение калорий не отображается.
Спасибо