# RemotePlaybackClient

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

*** ** * ** ***


```
public class RemotePlaybackClient
```

<br />

*** ** * ** ***

A helper class for playing media on remote routes using the remote playback protocol defined by `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent`.

The client maintains session state and offers a simplified interface for issuing remote playback media control intents to a single route.

## Summary

| ### Nested types |
|---|
| `public abstract class https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ActionCallback` Base callback type for remote playback requests. |
| `public abstract class https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback extends https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ActionCallback` Callback for remote playback requests that operate on items. |
| `public interface https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.OnMessageReceivedListener` A callback that will receive messages from media sessions. |
| `public abstract class https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback extends https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ActionCallback` Callback for remote playback requests that operate on sessions. |
| `public abstract class https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.StatusCallback` A callback that will receive media status updates. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#RemotePlaybackClient(android.content.Context,androidx.mediarouter.media.MediaRouter.RouteInfo)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/mediarouter/media/MediaRouter.RouteInfo route )` Creates a remote playback client for a route. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#endSession(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a request to end the media playback session. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#enqueue(android.net.Uri,java.lang.String,android.os.Bundle,long,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/net/Uri.html contentUri, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html mimeType, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html metadata, long positionMillis, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback )` Sends a request to enqueue a media item. |
| `@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/RemotePlaybackClient#getSessionId()()` Gets the current session id if there is one. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#getSessionStatus(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a request to get the status of the media playback session. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#getStatus(java.lang.String,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html itemId, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback )` Sends a request to get the status of a media item. |
| `boolean` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#hasSession()()` Returns true if the client currently has a session. |
| `boolean` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isMessagingSupported()()` Returns true if the route supports messages. |
| `boolean` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isQueuingSupported()()` Returns true if the route supports queuing features. |
| `boolean` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()()` Returns true if the route supports remote playback. |
| `boolean` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isSessionManagementSupported()()` Returns true if the route supports session management features. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#pause(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a request to pause media playback. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#play(android.net.Uri,java.lang.String,android.os.Bundle,long,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/net/Uri.html contentUri, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html mimeType, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html metadata, long positionMillis, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback )` Sends a request to play a media item. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#release()()` Releases resources owned by the client. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#remove(java.lang.String,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html itemId, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback )` Sends a request to remove a media item from the queue. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#resume(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a request to resume (unpause) media playback. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#seek(java.lang.String,long,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html itemId, long positionMillis, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback )` Sends a request to seek to a new position in a media item. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#sendMessage(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html message, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a message. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#setOnMessageReceivedListener(androidx.mediarouter.media.RemotePlaybackClient.OnMessageReceivedListener)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.OnMessageReceivedListener listener )` Sets a callback that should receive messages when a message is sent from media sessions created by this instance of the remote playback client changes. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#setSessionId(java.lang.String)(@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html sessionId)` Sets the current session id. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#setStatusCallback(androidx.mediarouter.media.RemotePlaybackClient.StatusCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.StatusCallback callback )` Sets a callback that should receive status updates when the state of media sessions or media items created by this instance of the remote playback client changes. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#startSession(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a request to start a new media playback session. |
| `void` | `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#stop(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)( @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback )` Sends a request to stop media playback and clear the media playback queue. |

## Public constructors

### RemotePlaybackClient

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

```
public RemotePlaybackClient(
    @NonNull Context context,
    @NonNull MediaRouter.RouteInfo route
)
```

Creates a remote playback client for a route.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context` | The `https://developer.android.com/reference/android/content/Context.html`. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/mediarouter/media/MediaRouter.RouteInfo route` | The media route. |

## Public methods

### endSession

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

```
public void endSession(
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a request to end the media playback session.

The request is issued in the current session. If this request is successful, the `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#getSessionId()` will be set to null after the callback is invoked.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_END_SESSION()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_END_SESSION()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support session management. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_END_SESSION()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isSessionManagementSupported()` |   |

### enqueue

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

```
public void enqueue(
    @NonNull Uri contentUri,
    @Nullable String mimeType,
    @Nullable Bundle metadata,
    long positionMillis,
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.ItemActionCallback callback
)
```

Sends a request to enqueue a media item.

Enqueues a new item to play. If the queue was previously paused, then will remain paused.

The request is issued in the current session. If no session is available, then one is created implicitly.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_ENQUEUE()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/net/Uri.html contentUri` | The content Uri to enqueue. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html mimeType` | The mime type of the content, or null if unknown. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html metadata` | The media item metadata bundle, or null if none. |
| `long positionMillis` | The initial content position for the item in milliseconds, or `0` to start at the beginning. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_ENQUEUE()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support queuing. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_ENQUEUE()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isQueuingSupported()` |   |

### getSessionId

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

```
public @Nullable String getSessionId()
```

Gets the current session id if there is one.

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html` | The current session id, or null if none. |

### getSessionStatus

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

```
public void getSessionStatus(
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a request to get the status of the media playback session.

The request is issued in the current session.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_SESSION_STATUS()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_SESSION_STATUS()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support session management. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_SESSION_STATUS()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isSessionManagementSupported()` |   |

### getStatus

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

```
public void getStatus(
    @NonNull String itemId,
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.ItemActionCallback callback
)
```

Sends a request to get the status of a media item.

The request is issued in the current session.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_STATUS()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html itemId` | The item id. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_STATUS()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_STATUS()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### hasSession

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

```
public boolean hasSession()
```

Returns true if the client currently has a session.

Equivalent to checking whether `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#getSessionId()` returns a non-null result.

| Returns |
|---|---|
| `boolean` | True if there is a current session. |

### isMessagingSupported

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

```
public boolean isMessagingSupported()
```

Returns true if the route supports messages.

This method returns true if the route supports all of the basic remote playback actions and all of the following actions: `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_START_SESSION()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEND_MESSAGE()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_END_SESSION()`.

| Returns |
|---|---|
| `boolean` | True if session management is supported. Implies `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` is also true. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### isQueuingSupported

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

```
public boolean isQueuingSupported()
```

Returns true if the route supports queuing features.

If the route does not support queuing, then at most one media item can be played at a time and the `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#enqueue(android.net.Uri,java.lang.String,android.os.Bundle,long,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)` method will not be available.

This method returns true if the route supports all of the basic remote playback actions and all of the following actions: `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_ENQUEUE()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_REMOVE()`.

| Returns |
|---|---|
| `boolean` | True if queuing is supported. Implies `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` is also true. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### isRemotePlaybackSupported

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

```
public boolean isRemotePlaybackSupported()
```

Returns true if the route supports remote playback.

If the route does not support remote playback, then none of the functionality offered by the client will be available.

This method returns true if the route supports all of the following actions: `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PLAY()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEEK()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_STATUS()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PAUSE()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_RESUME()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_STOP()`.

| Returns |
|---|---|
| `boolean` | True if remote playback is supported. |

### isSessionManagementSupported

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

```
public boolean isSessionManagementSupported()
```

Returns true if the route supports session management features.

If the route does not support session management, then the session will not be created until the first media item is played.

This method returns true if the route supports all of the basic remote playback actions and all of the following actions: `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_START_SESSION()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_GET_SESSION_STATUS()`, `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_END_SESSION()`.

| Returns |
|---|---|
| `boolean` | True if session management is supported. Implies `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` is also true. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### pause

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

```
public void pause(
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a request to pause media playback.

The request is issued in the current session. If playback is already paused then the request has no effect.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PAUSE()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PAUSE()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PAUSE()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### play

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

```
public void play(
    @NonNull Uri contentUri,
    @Nullable String mimeType,
    @Nullable Bundle metadata,
    long positionMillis,
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.ItemActionCallback callback
)
```

Sends a request to play a media item.

Clears the queue and starts playing the new item immediately. If the queue was previously paused, then it is resumed as a side-effect of this request.

The request is issued in the current session. If no session is available, then one is created implicitly.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PLAY()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/net/Uri.html contentUri` | The content Uri to play. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html mimeType` | The mime type of the content, or null if unknown. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html metadata` | The media item metadata bundle, or null if none. |
| `long positionMillis` | The initial content position for the item in milliseconds, or `0` to start at the beginning. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PLAY()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support remote playback. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_PLAY()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### release

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

```
public void release()
```

Releases resources owned by the client.

### remove

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

```
public void remove(
    @NonNull String itemId,
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.ItemActionCallback callback
)
```

Sends a request to remove a media item from the queue.

The request is issued in the current session.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_REMOVE()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html itemId` | The item id. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_REMOVE()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support queuing. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_REMOVE()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isQueuingSupported()` |   |

### resume

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

```
public void resume(
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a request to resume (unpause) media playback.

The request is issued in the current session. If playback is not paused then the request has no effect.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_RESUME()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_RESUME()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_RESUME()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### seek

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

```
public void seek(
    @NonNull String itemId,
    long positionMillis,
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.ItemActionCallback callback
)
```

Sends a request to seek to a new position in a media item.

Seeks to a new position. If the queue was previously paused then it remains paused but the item's new position is still remembered.

The request is issued in the current session.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEEK()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html itemId` | The item id. |
| `long positionMillis` | The new content position for the item in milliseconds, or `0` to start at the beginning. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEEK()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.ItemActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEEK()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |

### sendMessage

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

```
public void sendMessage(
    @Nullable Bundle message,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a message.

The request is issued in the current session.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEND_MESSAGE()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html message` | A bundle message denoting `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#EXTRA_MESSAGE()`. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support messages. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_SEND_MESSAGE()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isMessagingSupported()` |   |

### setOnMessageReceivedListener

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

```
public void setOnMessageReceivedListener(
    @Nullable RemotePlaybackClient.OnMessageReceivedListener listener
)
```

Sets a callback that should receive messages when a message is sent from media sessions created by this instance of the remote playback client changes.

The callback should be set before the session is created.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.OnMessageReceivedListener listener` | The callback to set. May be null to remove the previous callback. |

### setSessionId

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

```
public void setSessionId(@Nullable String sessionId)
```

Sets the current session id.

It is usually not necessary to set the session id explicitly since it is created as a side-effect of other requests such as `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#play(android.net.Uri,java.lang.String,android.os.Bundle,long,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)`, `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#enqueue(android.net.Uri,java.lang.String,android.os.Bundle,long,android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback)`, and `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#startSession(android.os.Bundle,androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback)`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/String.html sessionId` | The new session id, or null if none. |

### setStatusCallback

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

```
public void setStatusCallback(
    @Nullable RemotePlaybackClient.StatusCallback callback
)
```

Sets a callback that should receive status updates when the state of media sessions or media items created by this instance of the remote playback client changes.

The callback should be set before the session is created or any play commands are issued.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.StatusCallback callback` | The callback to set. May be null to remove the previous callback. |

### startSession

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

```
public void startSession(
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a request to start a new media playback session.

The application must wait for the callback to indicate that this request is complete before issuing other requests that affect the session. If this request is successful then the previous session will be invalidated.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_START_SESSION()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_START_SESSION()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` | if the route does not support session management. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_START_SESSION()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isSessionManagementSupported()` |   |

### stop

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

```
public void stop(
    @Nullable Bundle extras,
    @Nullable RemotePlaybackClient.SessionActionCallback callback
)
```

Sends a request to stop media playback and clear the media playback queue.

The request is issued in the current session. If the queue is already empty then the request has no effect.

Please refer to `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_STOP()` for more information about the semantics of this request.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/os/Bundle.html extras` | A bundle of extra arguments to be added to the `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_STOP()` intent, or null if none. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient.SessionActionCallback callback` | A callback to invoke when the request has been processed, or null if none. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if there is no current session. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/mediarouter/media/MediaControlIntent#ACTION_STOP()` |   |
| `https://developer.android.com/reference/androidx/mediarouter/media/RemotePlaybackClient#isRemotePlaybackSupported()` |   |