# MediaRouteButton

## Functions summary

|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/annotation/MainThread @https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButton.composable#MediaRouteButton(androidx.compose.ui.Modifier,androidx.media3.cast.MediaRouteButtonState)(modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier, state: https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButtonState)` A Material3 `https://developer.android.com/reference/kotlin/androidx/compose/material3/IconButton.composable#IconButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.material3.IconButtonColors,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.ui.graphics.Shape,kotlin.Function0)` that displays a media route button. |

## Functions

### MediaRouteButton

Artifact: [androidx.media3:media3-cast](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/cast/MediaRouteButton.kt+function:MediaRouteButton)

```
@MainThread
@UnstableApi
@Composable
fun MediaRouteButton(
    modifier: Modifier = Modifier,
    state: MediaRouteButtonState = rememberMediaRouteButtonState()
): Unit
```

A Material3 `https://developer.android.com/reference/kotlin/androidx/compose/material3/IconButton.composable#IconButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.material3.IconButtonColors,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.ui.graphics.Shape,kotlin.Function0)` that displays a media route button.

Clicking the button displays the route chooser dialog for transferring media or the route controller dialog to control the remote playback. The default behavior prioritizes launching the system's route chooser / controller dialog if available and falls back to an in-app dialog otherwise.

The button's tint color can be customized by providing a `https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#LocalContentColor()` in the composition hierarchy.

```kotlin
 CompositionLocalProvider(LocalContentColor provides Color.Blue) {
   MediaRouteButton(modifier = modifier)
}
```

Consumers can also use the `https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButtonState` to control inactivity timeout.

```kotlin
@Composable
fun MyMediaControls() {
    val mediaRouteState = rememberMediaRouteButtonState()

    // Pause inactivity timeout if the routing picker is visible
    LaunchedEffect(mediaRouteState.isPickerVisible) {
        if (mediaRouteState.isPickerVisible) {
            stopTimer()
        } else {
            startTimer()
        }
    }

    // Pass the hoisted state here
    MediaRouteButton(modifier, mediaRouteState)
}
```

| Parameters |
|---|---|
| `modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier = Modifier` | the `https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier` to be applied to the button. |
| `state: https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButtonState = rememberMediaRouteButtonState()` | the `https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButtonState` to be used for the button. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if any of the following condition occurs: - This method is not called on the main thread. - The `https://developer.android.com/reference/kotlin/androidx/media3/cast/Cast` has not been initialized via Cast.initialize() before this method is called. |