# MediaRouteProvider.DynamicGroupRouteController

Artifact: [androidx.mediarouter:mediarouter](https://developer.android.com/jetpack/androidx/releases/mediarouter) [View Source](https://cs.android.com/search?q=file:androidx/mediarouter/media/MediaRouteProvider.java+class:androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/mediarouter#1.1.0)

*** ** * ** ***


```
public abstract class MediaRouteProvider.DynamicGroupRouteController extends MediaRouteProvider.RouteController
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.mediarouter.media.MediaRouteProvider.RouteController](https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController) ||
|   | ↳ | [androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController](https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController) |

*** ** * ** ***

Provides control over a dynamic group route. A dynamic group route is a group of routes such that a route can be added or removed from the group by the user dynamically.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor` Contains a route, its selection state and its capabilities. |
| `public final class https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder` Builder for `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#DynamicGroupRouteController()()` |

| ### Public methods |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#getGroupableSelectionTitle()()` Gets the title of the groupable routes section which will be shown to the user. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#getTransferableSectionTitle()()` Gets the title of the transferable routes section which will be shown to the user. |
| `final void` | `[notifyDynamicRoutesChanged](https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>))( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/util/Collection.html<https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor> routes )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#notifyDynamicRoutesChanged(androidx.mediarouter.media.MediaRouteDescriptor,java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>)` instead to notify information of the group. <br /> |
| `final void` | `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#notifyDynamicRoutesChanged(androidx.mediarouter.media.MediaRouteDescriptor,java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteDescriptor groupRoute, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/util/Collection.html<https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor> dynamicRoutes )` Sets the group route descriptor and the dynamic route descriptors for the dynamic group. |
| `abstract void` | `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#onAddMemberRoute(java.lang.String)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html routeId)` Called when a user adds a route into the casting session. |
| `abstract void` | `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#onRemoveMemberRoute(java.lang.String)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html routeId)` Called when a user removes a route from casting session. |
| `abstract void` | `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#onUpdateMemberRoutes(java.util.List<java.lang.String>)(@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/java/lang/String.html> routeIds)` Called when a user selects a new set of routes s/he wants the session to be played. |

### Inherited methods

From [androidx.mediarouter.media.MediaRouteProvider.RouteController](https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController) `boolean` `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onControlRequest(android.content.Intent,androidx.mediarouter.media.MediaRouter.ControlRequestCallback)(
@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Intent.html intent,
@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/MediaRouter.ControlRequestCallback callback
)`

Performs a `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent` request asynchronously on behalf of the route.
`void` `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onRelease()()`

Releases the route controller, allowing it to free its resources.
`void` `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onSelect()()`

Selects the route.
`void` `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onSetVolume(int)(int volume)`

Requests to set the volume of the route.
`void` `[onUnselect](https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onUnselect())()`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onUnselect(int)` instead.

<br />

`void` `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onUnselect(int)(int reason)`

Unselects the route and provides a reason.
`void` `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.RouteController#onUpdateVolume(int)(int delta)`

Requests an incremental volume update for the route.

## Public constructors

### DynamicGroupRouteController

Added in 1.1.0

```
public DynamicGroupRouteController()
```

## Public methods

### getGroupableSelectionTitle

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

```
public @Nullable String getGroupableSelectionTitle()
```

Gets the title of the groupable routes section which will be shown to the user. It is provided by `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider`. e.g. "Add a device."

### getTransferableSectionTitle

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

```
public @Nullable String getTransferableSectionTitle()
```

Gets the title of the transferable routes section which will be shown to the user. It is provided by `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider`. `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider`. e.g. "Play on group."

### notifyDynamicRoutesChanged

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/mediarouter#1.1.0) Deprecated in [1.2.0](https://developer.android.com/jetpack/androidx/releases/mediarouter#1.2.0)

```
public final void [notifyDynamicRoutesChanged](https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>))(
    @NonNull Collection<MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor> routes
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController#notifyDynamicRoutesChanged(androidx.mediarouter.media.MediaRouteDescriptor,java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>)` instead to notify information of the group.

Sets the dynamic route descriptors for the dynamic group.

The dynamic group controller should call this method to notify the current dynamic group state.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/util/Collection.html<https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor> routes` | The dynamic route descriptors for published routes. At least a selected or selecting route must be included. |

### notifyDynamicRoutesChanged

Added in [1.2.0](https://developer.android.com/jetpack/androidx/releases/mediarouter#1.2.0)

```
public final void notifyDynamicRoutesChanged(
    @NonNull MediaRouteDescriptor groupRoute,
    @NonNull Collection<MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor> dynamicRoutes
)
```

Sets the group route descriptor and the dynamic route descriptors for the dynamic group.

The dynamic group controller should call this method to notify the current dynamic group state.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteDescriptor groupRoute` | The media route descriptor describing the dynamic group. The `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouter#getSelectedRoute()` of the media router will contain this information. If it is `https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteDescriptor#isEnabled()`, the media router will unselect the dynamic group and release the route controller. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/util/Collection.html<https://developer.android.com/reference/androidx/mediarouter/media/MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor> dynamicRoutes` | The dynamic route descriptors for published routes. At least a selected or selecting route should be included. |

### onAddMemberRoute

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

```
public abstract void onAddMemberRoute(@NonNull String routeId)
```

Called when a user adds a route into the casting session.

### onRemoveMemberRoute

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

```
public abstract void onRemoveMemberRoute(@NonNull String routeId)
```

Called when a user removes a route from casting session.

### onUpdateMemberRoutes

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

```
public abstract void onUpdateMemberRoutes(@Nullable List<String> routeIds)
```

Called when a user selects a new set of routes s/he wants the session to be played.