in health-services/ExerciseSample/app/src/main/java/com/example/exercise/HealthServicesManager.kt [87:139]
suspend fun startExercise() {
Log.d(TAG, "Starting exercise")
// Types for which we want to receive metrics. Only ask for ones that are supported.
val capabilities = getExerciseCapabilities() ?: return
val dataTypes = setOf(
DataType.HEART_RATE_BPM,
).intersect(capabilities.supportedDataTypes)
val aggDataTypes = setOf(
DataType.TOTAL_CALORIES,
DataType.DISTANCE
).intersect(capabilities.supportedDataTypes)
val exerciseGoals = mutableListOf<ExerciseGoal>()
if (supportsCalorieGoal(capabilities)) {
// Create a one-time goal.
exerciseGoals.add(
ExerciseGoal.createOneTimeGoal(
DataTypeCondition(
dataType = DataType.TOTAL_CALORIES,
threshold = Value.ofDouble(CALORIES_THRESHOLD),
comparisonType = ComparisonType.GREATER_THAN_OR_EQUAL
)
)
)
}
if (supportsDistanceMilestone(capabilities)) {
// Create a milestone goal. To make a milestone for every kilometer, set the initial
// threshold to 1km and the period to 1km.
exerciseGoals.add(
ExerciseGoal.createMilestone(
condition = DataTypeCondition(
dataType = DataType.DISTANCE,
threshold = Value.ofDouble(DISTANCE_THRESHOLD),
comparisonType = ComparisonType.GREATER_THAN_OR_EQUAL
),
period = Value.ofDouble(DISTANCE_THRESHOLD)
)
)
}
val config = ExerciseConfig.builder()
.setExerciseType(ExerciseType.RUNNING)
.setShouldEnableAutoPauseAndResume(false)
.setAggregateDataTypes(aggDataTypes)
.setDataTypes(dataTypes)
.setExerciseGoals(exerciseGoals)
// Required for GPS for LOCATION data type, optional for some other types.
.setShouldEnableGps(true)
.build()
exerciseClient.startExercise(config).await()
}