Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Nested Classes](https://developer.android.com/reference/android/media/MediaRouter#nestedclasses) \| [Constants](https://developer.android.com/reference/android/media/MediaRouter#constants) \| [Methods](https://developer.android.com/reference/android/media/MediaRouter#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/media/MediaRouter#inhmethods)

# MediaRouter

*** ** * ** ***

` public class MediaRouter `   
` extends https://developer.android.com/reference/java/lang/Object ` ` `

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.media.MediaRouter |

<br />

*** ** * ** ***

This API is not recommended for new applications. Use the [AndroidX](https://developer.android.com/jetpack/androidx) [Media Router Library](https://developer.android.com/reference/androidx/mediarouter/media/package-summary) for consistent behavior across all devices.

MediaRouter allows applications to control the routing of media channels and streams from the current device to external speakers and destination devices.

A MediaRouter is retrieved through `https://developer.android.com/reference/android/content/Context#getSystemService(java.lang.String)` of a `https://developer.android.com/reference/android/content/Context#MEDIA_ROUTER_SERVICE`.

This API is not thread-safe; all interactions with it must be done from the main thread of the process.

## Summary

| ### Nested classes ||
|---|---|
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.Callback` Interface for receiving events about media routing changes. |
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` Definition of a category of routes. |
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.RouteGroup` Information about a route that consists of multiple other routes in a group. |
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` Information about a media route. |
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.SimpleCallback` Stub implementation of `https://developer.android.com/reference/android/media/MediaRouter.Callback`. |
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo` Information about a route that the application may define and modify. |
| ` class` | `https://developer.android.com/reference/android/media/MediaRouter.VolumeCallback` Interface for receiving events about volume changes. |

| ### Constants ||
|---|---|
| `int` | `https://developer.android.com/reference/android/media/MediaRouter#CALLBACK_FLAG_PERFORM_ACTIVE_SCAN` Flag for `https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback)`: Actively scan for routes while this callback is registered. |
| `int` | `https://developer.android.com/reference/android/media/MediaRouter#CALLBACK_FLAG_UNFILTERED_EVENTS` Flag for `https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback)`: Do not filter route events. |
| `int` | `https://developer.android.com/reference/android/media/MediaRouter#ROUTE_TYPE_LIVE_AUDIO` Route type flag for live audio. |
| `int` | `https://developer.android.com/reference/android/media/MediaRouter#ROUTE_TYPE_LIVE_VIDEO` Route type flag for live video. |
| `int` | `https://developer.android.com/reference/android/media/MediaRouter#ROUTE_TYPE_USER` Route type flag for application-specific usage. |

| ### Public methods ||
|---|---|
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback,%20int)(int types, https://developer.android.com/reference/android/media/MediaRouter.Callback cb, int flags) ` Add a callback to listen to events about specific kinds of media routes. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback)(int types, https://developer.android.com/reference/android/media/MediaRouter.Callback cb) ` Add a callback to listen to events about specific kinds of media routes. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#addUserRoute(android.media.MediaRouter.UserRouteInfo)(https://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo info) ` Add an app-specified route for media to the MediaRouter. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#clearUserRoutes()() ` Remove all app-specified routes from the MediaRouter. |
| ` https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` | ` https://developer.android.com/reference/android/media/MediaRouter#createRouteCategory(int,%20boolean)(int nameResId, boolean isGroupable) ` Create a new route category. |
| ` https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` | ` https://developer.android.com/reference/android/media/MediaRouter#createRouteCategory(java.lang.CharSequence,%20boolean)(https://developer.android.com/reference/java/lang/CharSequence name, boolean isGroupable) ` Create a new route category. |
| ` https://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo` | ` https://developer.android.com/reference/android/media/MediaRouter#createUserRoute(android.media.MediaRouter.RouteCategory)(https://developer.android.com/reference/android/media/MediaRouter.RouteCategory category) ` Create a new user route that may be modified and registered for use by the application. |
| ` https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` | ` https://developer.android.com/reference/android/media/MediaRouter#getCategoryAt(int)(int index) ` Return the `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` at the given index. |
| ` int` | ` https://developer.android.com/reference/android/media/MediaRouter#getCategoryCount()() ` Return the number of `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` currently represented by routes known to this MediaRouter. |
| ` https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` | ` https://developer.android.com/reference/android/media/MediaRouter#getDefaultRoute()() ` Gets the default route for playing media content on the system. |
| ` https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` | ` https://developer.android.com/reference/android/media/MediaRouter#getRouteAt(int)(int index) ` Return the route at the specified index. |
| ` int` | ` https://developer.android.com/reference/android/media/MediaRouter#getRouteCount()() ` Return the number of `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` currently known to this MediaRouter. |
| ` https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` | ` https://developer.android.com/reference/android/media/MediaRouter#getSelectedRoute(int)(int type) ` Return the currently selected route for any of the given types |
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#removeCallback(android.media.MediaRouter.Callback)(https://developer.android.com/reference/android/media/MediaRouter.Callback cb) ` Remove the specified callback. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#removeUserRoute(android.media.MediaRouter.UserRouteInfo)(https://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo info) ` Remove an app-specified route for media from the MediaRouter. |
| ` void` | ` https://developer.android.com/reference/android/media/MediaRouter#selectRoute(int,%20android.media.MediaRouter.RouteInfo)(int types, https://developer.android.com/reference/android/media/MediaRouter.RouteInfo route) ` Select the specified route to use for output of the given media types. |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.

## Constants

### CALLBACK_FLAG_PERFORM_ACTIVE_SCAN

Added in [API level 18](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN
```

Flag for `https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback)`: Actively scan for routes while this callback is registered.

When this flag is specified, the media router will actively scan for new routes. Certain routes, such as wifi display routes, may not be discoverable except when actively scanning. This flag is typically used when the route picker dialog has been opened by the user to ensure that the route information is up to date.

Active scanning may consume a significant amount of power and may have intrusive effects on wireless connectivity. Therefore it is important that active scanning only be requested when it is actually needed to satisfy a user request to discover and select a new route.

<br />

<br />

Constant Value: 1 (0x00000001)

### CALLBACK_FLAG_UNFILTERED_EVENTS

Added in [API level 18](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CALLBACK_FLAG_UNFILTERED_EVENTS
```

Flag for `https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback)`: Do not filter route events.

When this flag is specified, the callback will be invoked for event that affect any route even if they do not match the callback's filter.

<br />

<br />

Constant Value: 2 (0x00000002)

### ROUTE_TYPE_LIVE_AUDIO

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUTE_TYPE_LIVE_AUDIO
```

Route type flag for live audio.

A device that supports live audio routing will allow the media audio stream to be routed to supported destinations. This can include internal speakers or audio jacks on the device itself, A2DP devices, and more.

Once initiated this routing is transparent to the application. All audio played on the media stream will be routed to the selected destination.

<br />

<br />

Constant Value: 1 (0x00000001)

### ROUTE_TYPE_LIVE_VIDEO

Added in [API level 17](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUTE_TYPE_LIVE_VIDEO
```

Route type flag for live video.

A device that supports live video routing will allow a mirrored version of the device's primary display or a customized `https://developer.android.com/reference/android/app/Presentation` to be routed to supported destinations.

Once initiated, display mirroring is transparent to the application. While remote routing is active the application may use a `https://developer.android.com/reference/android/app/Presentation` to replace the mirrored view on the external display with different content.

<br />

<br />

**See also:**

- `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo#getPresentationDisplay()`
- `https://developer.android.com/reference/android/app/Presentation`

Constant Value: 2 (0x00000002)

### ROUTE_TYPE_USER

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ROUTE_TYPE_USER
```

Route type flag for application-specific usage.

Unlike other media route types, user routes are managed by the application. The MediaRouter will manage and dispatch events for user routes, but the application is expected to interpret the meaning of these events and perform the requested routing tasks.

<br />

<br />

Constant Value: 8388608 (0x00800000)

## Public methods

### addCallback

Added in [API level 18](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void addCallback (int types, 
                MediaRouter.Callback cb, 
                int flags)
```

Add a callback to listen to events about specific kinds of media routes. If the specified callback is already registered, its registration will be updated for any additional route types specified.

By default, the callback will only be invoked for events that affect routes that match the specified selector. The filtering may be disabled by specifying the `https://developer.android.com/reference/android/media/MediaRouter#CALLBACK_FLAG_UNFILTERED_EVENTS` flag.

<br />

<br />

| Parameters ||
|---|---|
| `types` | `int`: Types of routes this callback is interested in <br /> |
| `cb` | `MediaRouter.Callback`: Callback to add <br /> |
| `flags` | `int`: Flags to control the behavior of the callback. May be zero or a combination of `https://developer.android.com/reference/android/media/MediaRouter#CALLBACK_FLAG_PERFORM_ACTIVE_SCAN` and `https://developer.android.com/reference/android/media/MediaRouter#CALLBACK_FLAG_UNFILTERED_EVENTS`. <br /> |

### addCallback

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void addCallback (int types, 
                MediaRouter.Callback cb)
```

Add a callback to listen to events about specific kinds of media routes. If the specified callback is already registered, its registration will be updated for any additional route types specified.

This is a convenience method that has the same effect as calling `https://developer.android.com/reference/android/media/MediaRouter#addCallback(int,%20android.media.MediaRouter.Callback,%20int)` without flags.

<br />

<br />

| Parameters ||
|---|---|
| `types` | `int`: Types of routes this callback is interested in <br /> |
| `cb` | `MediaRouter.Callback`: Callback to add <br /> |

### addUserRoute

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void addUserRoute (MediaRouter.UserRouteInfo info)
```

Add an app-specified route for media to the MediaRouter. App-specified route definitions are created using `https://developer.android.com/reference/android/media/MediaRouter#createUserRoute(android.media.MediaRouter.RouteCategory)`

<br />

| Parameters ||
|---|---|
| `info` | `MediaRouter.UserRouteInfo`: Definition of the route to add <br /> |

**See also:**

- `https://developer.android.com/reference/android/media/MediaRouter#createUserRoute(android.media.MediaRouter.RouteCategory)`
- `https://developer.android.com/reference/android/media/MediaRouter#removeUserRoute(android.media.MediaRouter.UserRouteInfo)`

### clearUserRoutes

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void clearUserRoutes ()
```

Remove all app-specified routes from the MediaRouter.

<br />

**See also:**

- `https://developer.android.com/reference/android/media/MediaRouter#removeUserRoute(android.media.MediaRouter.UserRouteInfo)`

### createRouteCategory

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.RouteCategory createRouteCategory (int nameResId, 
                boolean isGroupable)
```

Create a new route category. Each route must belong to a category.

<br />

| Parameters ||
|---|---|
| `nameResId` | `int`: Resource ID of the name of the new category <br /> |
| `isGroupable` | `boolean`: true if routes in this category may be grouped with one another <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` | the new RouteCategory <br /> |

### createRouteCategory

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.RouteCategory createRouteCategory (CharSequence name, 
                boolean isGroupable)
```

Create a new route category. Each route must belong to a category.

<br />

| Parameters ||
|---|---|
| `name` | `CharSequence`: Name of the new category <br /> |
| `isGroupable` | `boolean`: true if routes in this category may be grouped with one another <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` | the new RouteCategory <br /> |

### createUserRoute

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.UserRouteInfo createUserRoute (MediaRouter.RouteCategory category)
```

Create a new user route that may be modified and registered for use by the application.

<br />

| Parameters ||
|---|---|
| `category` | `MediaRouter.RouteCategory`: The category the new route will belong to <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo` | A new UserRouteInfo for use by the application <br /> |

**See also:**

- `https://developer.android.com/reference/android/media/MediaRouter#addUserRoute(android.media.MediaRouter.UserRouteInfo)`
- `https://developer.android.com/reference/android/media/MediaRouter#removeUserRoute(android.media.MediaRouter.UserRouteInfo)`
- `https://developer.android.com/reference/android/media/MediaRouter#createRouteCategory(java.lang.CharSequence,%20boolean)`

### getCategoryAt

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.RouteCategory getCategoryAt (int index)
```

Return the `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` at the given index. Valid indices are in the range \[0-getCategoryCount).

<br />

| Parameters ||
|---|---|
| `index` | `int`: which category to return <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` | the category at index <br /> |

### getCategoryCount

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int getCategoryCount ()
```

Return the number of `https://developer.android.com/reference/android/media/MediaRouter.RouteCategory` currently represented by routes known to this MediaRouter.

<br />

| Returns ||
|---|---|
| `int` | the number of unique categories represented by this MediaRouter's known routes <br /> |

### getDefaultRoute

Added in [API level 18](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.RouteInfo getDefaultRoute ()
```

Gets the default route for playing media content on the system.

The system always provides a default route.

<br />

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` | The default route, which is guaranteed to never be null. <br /> |

### getRouteAt

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.RouteInfo getRouteAt (int index)
```

Return the route at the specified index.

<br />

| Parameters ||
|---|---|
| `index` | `int`: index of the route to return <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` | the route at index <br /> |

### getRouteCount

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int getRouteCount ()
```

Return the number of `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` currently known to this MediaRouter.

<br />

| Returns ||
|---|---|
| `int` | the number of routes tracked by this router <br /> |

### getSelectedRoute

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public MediaRouter.RouteInfo getSelectedRoute (int type)
```

Return the currently selected route for any of the given types

<br />

| Parameters ||
|---|---|
| `type` | `int`: route types <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/MediaRouter.RouteInfo` | the selected route <br /> |

### removeCallback

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void removeCallback (MediaRouter.Callback cb)
```

Remove the specified callback. It will no longer receive events about media routing.

<br />

| Parameters ||
|---|---|
| `cb` | `MediaRouter.Callback`: Callback to remove <br /> |

### removeUserRoute

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void removeUserRoute (MediaRouter.UserRouteInfo info)
```

Remove an app-specified route for media from the MediaRouter.

<br />

| Parameters ||
|---|---|
| `info` | `MediaRouter.UserRouteInfo`: Definition of the route to remove <br /> |

**See also:**

- `https://developer.android.com/reference/android/media/MediaRouter#addUserRoute(android.media.MediaRouter.UserRouteInfo)`

### selectRoute

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void selectRoute (int types, 
                MediaRouter.RouteInfo route)
```

Select the specified route to use for output of the given media types.

As API version 18, this function may be used to select any route. In prior versions, this function could only be used to select user routes and would ignore any attempt to select a system route.

<br />

<br />

| Parameters ||
|---|---|
| `types` | `int`: type flags indicating which types this route should be used for. The route must support at least a subset. <br /> |
| `route` | `MediaRouter.RouteInfo`: Route to select. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if the given route is `null` |