# ExerciseRouteRequestContract

Artifact: [androidx.health.connect:connect-client](https://developer.android.com/jetpack/androidx/releases/health-connect) [View Source](https://cs.android.com/search?q=file:androidx/health/connect/client/contracts/ExerciseRouteRequestContract.kt+class:androidx.health.connect.client.contracts.ExerciseRouteRequestContract) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

*** ** * ** ***


```
public final class ExerciseRouteRequestContract extends ActivityResultContract<@NonNull String, ExerciseRoute>
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.activity.result.contract.ActivityResultContract](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract)\<@[NonNull](https://developer.android.com/reference/androidx/annotation/NonNull) [String](https://developer.android.com/reference/java/lang/String.html), [ExerciseRoute](https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute)\> ||
|   | ↳ | [androidx.health.connect.client.contracts.ExerciseRouteRequestContract](https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract) |

*** ** * ** ***

An `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract` to request a route associated with an `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseSessionRecord`.

It receives the session id as input and returns an ExerciseRoute as output, if available.

```kotlin
import androidx.health.connect.client.contracts.ExerciseRouteRequestContract
import androidx.health.connect.client.readRecord
import androidx.health.connect.client.records.ExerciseRoute
import androidx.health.connect.client.records.ExerciseRouteResult
import androidx.health.connect.client.records.ExerciseSessionRecord

// See https://developer.android.com/training/basics/intents/result#launch for appropriately
// handling ActivityResultContract.
val requestExerciseRoute =
    activityResultCaller.registerForActivityResult(ExerciseRouteRequestContract()) {
        exerciseRoute: ExerciseRoute? ->
        if (exerciseRoute != null) {
            displayExerciseRoute(exerciseRoute)
        } else {
            // Consent was denied
        }
    }

// Show exercise route, based on user action
val exerciseSessionRecord =
    healthConnectClient.readRecord<ExerciseSessionRecord>(recordId).record

when (val exerciseRouteResult = exerciseSessionRecord.exerciseRouteResult) {
    is ExerciseRouteResult.Data -> displayExerciseRoute(exerciseRouteResult.exerciseRoute)
    is ExerciseRouteResult.ConsentRequired -> requestExerciseRoute.launch(recordId)
    is ExerciseRouteResult.NoData -> Unit // No exercise route to show
    else -> Unit
}
```

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract#ExerciseRouteRequestContract()()` |

| ### Public methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Intent.html` | `https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract#createIntent(android.content.Context,kotlin.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html input)` Creates an intent to request an `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute`. |
| `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute` | `https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract#parseResult(kotlin.Int,android.content.Intent)(int resultCode, https://developer.android.com/reference/android/content/Intent.html intent)` Converts the activity result into `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute`, to return as output. |

### Inherited methods

From [androidx.activity.result.contract.ActivityResultContract](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract) `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract.SynchronousResult<https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute>` `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract#getSynchronousResult(android.content.Context,kotlin.Any)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html context, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html input)`

An optional method you can implement that can be used to potentially provide a result in lieu of starting an activity.

## Public constructors

### ExerciseRouteRequestContract

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

```
public ExerciseRouteRequestContract()
```

## Public methods

### createIntent

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

```
public @NonNull Intent createIntent(@NonNull Context context, @NonNull String input)
```

Creates an intent to request an `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute`. It receives the exercise session id as `https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract#createIntent(android.content.Context,kotlin.String)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html context` | the context |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html input` | the exercise session id obtained via `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseSessionRecord#metadata()` |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if the `https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract#createIntent(android.content.Context,kotlin.String)` is an empty string. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract#createIntent(android.content.Context,kotlin.Any)` |   |

### parseResult

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

```
public ExerciseRoute parseResult(int resultCode, Intent intent)
```

Converts the activity result into `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute`, to return as output.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/health/connect/client/records/ExerciseRoute` | null if the user didn't grant access to the exercise route or if there's no exercise route for the session id passed on `https://developer.android.com/reference/androidx/health/connect/client/contracts/ExerciseRouteRequestContract#createIntent(android.content.Context,kotlin.String)`. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract#parseResult(kotlin.Int,android.content.Intent)` |   |