Summary: Nested Classes | Constants | Fields | Methods | Inherited Methods | [Expand All]
public class

# RemoteMediaClient

extends Object
implements Cast.MessageReceivedCallback

java.lang.Object
↳ | com.google.android.gms.cast.framework.media.RemoteMediaClient

## Class Overview

Class for controlling a media player application running on a receiver.

Some operations, like loading of media or adjusting volume, can be tracked. The corresponding methods return a `PendingResult` for this purpose. In case of error, such as having lost the connection to the service, the `PendingResult` will provide a status of `FAILED`.

Any media session created by calling `load(MediaInfo)` or `queueLoad(MediaQueueItem[], int, int, long, JSONObject)` will be associated with a queue on the receiver application. If the media session is created by calling `load(MediaInfo)`, then the media queue is a non-repeatable queue with a single item, and other queuing related operations such as `queueInsertItems(MediaQueueItem[], int, JSONObject)` and `queueUpdateItems(MediaQueueItem[], JSONObject)` can still be applied on top of it.

## Summary

Nested Classes
interface | RemoteMediaClient.Listener | The listener interface for tracking player status changes.
interface | RemoteMediaClient.MediaChannelResult | Result of a media command.
interface | RemoteMediaClient.ProgressListener | The listener interface for getting updates on the progress of the currently playing media.

Constants
int | RESUME_STATE_PAUSE | A resume state indicating that the player should be paused, regardless of its current state.
int | RESUME_STATE_PLAY | A resume state indicating that the player should be playing, regardless of its current state.
int | RESUME_STATE_UNCHANGED | A resume state indicating that the player state should be left unchanged.
int | STATUS_FAILED | A status indicating that a request failed.
int | STATUS_REPLACED | A status indicating that the request's progress is no longer being tracked because another request of the same type has been made before the first request completed.
int | STATUS_SUCCEEDED | A status indicating that a request completed successfully.

Fields
public static final String | NAMESPACE | Returns the namespace used by the `RemoteMediaClient` to send media commands.

Public Methods
void | addListener(RemoteMediaClient.Listener listener) Adds the `RemoteMediaClient.Listener` to get status updates.
boolean | addProgressListener(RemoteMediaClient.ProgressListener listener, long periodMs) Adds the `RemoteMediaClient.ProgressListener` to the progress updates.
long | getApproximateStreamPosition() Returns the approximate stream position as calculated from the last received stream information and the elapsed wall-time since that update.
MediaQueueItem | getCurrentItem() Returns the current item in the queue, or `null` if the queue is empty.
int | getIdleReason() Returns the current idle reason.
MediaQueueItem | getLoadingItem() Returns the currently loading item in the queue, or `null` if no item is being loaded.
MediaInfo | getMediaInfo() Returns the current media information, or `null` if there isn't a media session.
MediaStatus | getMediaStatus() Returns the current media status, or `null` if there isn't a media session..
String | getNamespace() Returns the media control namespace.
int | getPlayerState() Returns the current player state.
MediaQueueItem | getPreloadedItem() Returns the currently preloaded item in the queue, or `null` if no item has been preloaded.
long | getStreamDuration() Convenience method for getting the stream duration.
boolean | hasMediaSession() Returns `true` if there is a media session, that is, media is loaded on the remote receiver.
boolean | isBuffering() Returns `true` if the current media is buffering.
boolean | isLiveStream() Returns `true` if the currently loaded media is a live stream, otherwise returns `false`.
boolean | isLoadingNextItem() Returns `true` if the next item is being loaded.
boolean | isPaused() Returns `true` if the current media is paused.
boolean | isPlaying() Returns `true` if the current media is playing.
PendingResult<RemoteMediaClient.MediaChannelResult> | load(MediaInfo mediaInfo, boolean autoplay, long playPosition) Loads and optionally starts playback of a new media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | load(MediaInfo mediaInfo, boolean autoplay, long playPosition, long[] activeTrackIds, JSONObject customData) Loads and optionally starts playback of a new media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | load(MediaInfo mediaInfo) Loads and automatically starts playback of a new media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | load(MediaInfo mediaInfo, boolean autoplay, long playPosition, JSONObject customData) Loads and optionally starts playback of a new media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | load(MediaInfo mediaInfo, boolean autoplay) Loads and optionally starts playback of a new media item.
void | onMessageReceived(CastDevice castDevice, String namespace, String message) Called when a message is received from a given `CastDevice`.
PendingResult<RemoteMediaClient.MediaChannelResult> | pause() Pauses playback of the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | pause(JSONObject customData) Pauses playback of the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | play() Begins (or resumes) playback of the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | play(JSONObject customData) Begins (or resumes) playback of the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueAppendItem(MediaQueueItem item, JSONObject customData) Appends a new media item to the end of the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueInsertAndPlayItem(MediaQueueItem item, int insertBeforeItemId, long playPosition, JSONObject customData) A convenience method that inserts a single item into the queue and starts playing it at the specified position.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueInsertAndPlayItem(MediaQueueItem item, int insertBeforeItemId, JSONObject customData) A convenience method that inserts a single item into the queue and starts playing it.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueInsertItems(MediaQueueItem[] itemsToInsert, int insertBeforeItemId, JSONObject customData) Inserts a list of new media items into the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueJumpToItem(int itemId, JSONObject customData) Plays the item with `itemId` in the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueJumpToItem(int itemId, long playPosition, JSONObject customData) Plays the item with `itemId` in the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueLoad(MediaQueueItem[] items, int startIndex, int repeatMode, long playPosition, JSONObject customData) Loads and optionally starts playback of a new queue of media items.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueLoad(MediaQueueItem[] items, int startIndex, int repeatMode, JSONObject customData) Loads and optionally starts playback of a new queue of media items.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueMoveItemToNewIndex(int itemId, int newIndex, JSONObject customData) Moves the item with `itemId` to a new position in the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueNext(JSONObject customData) Jumps to the next item in the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queuePrev(JSONObject customData) Jumps to the previous item in the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueRemoveItem(int itemId, JSONObject customData) Removes the item with `itemId` from the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueRemoveItems(int[] itemIdsToRemove, JSONObject customData) Removes a list of items from the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueReorderItems(int[] itemIdsToReorder, int insertBeforeItemId, JSONObject customData) Reorder a list of media items in the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueSetRepeatMode(int repeatMode, JSONObject customData) Sets the repeat mode of the queue.
PendingResult<RemoteMediaClient.MediaChannelResult> | queueUpdateItems(MediaQueueItem[] itemsToUpdate, JSONObject customData) Updates properties of a subset of the existing items in the media queue.
void | removeListener(RemoteMediaClient.Listener listener) Removes the `RemoteMediaClient.Listener`.
void | removeProgressListener(RemoteMediaClient.ProgressListener listener) Removes the `RemoteMediaClient.ProgressListener`.
PendingResult<RemoteMediaClient.MediaChannelResult> | requestStatus() Requests updated media status information from the receiver.
PendingResult<RemoteMediaClient.MediaChannelResult> | seek(long position) Seeks to a new position within the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | seek(long position, int resumeState, JSONObject customData) Seeks to a new position within the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | seek(long position, int resumeState) Seeks to a new position within the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | setActiveMediaTracks(long[] trackIds) Sets the active media tracks.
PendingResult<RemoteMediaClient.MediaChannelResult> | setStreamMute(boolean muted) Toggles the stream muting.
PendingResult<RemoteMediaClient.MediaChannelResult> | setStreamMute(boolean muted, JSONObject customData) Toggles the stream muting.
PendingResult<RemoteMediaClient.MediaChannelResult> | setStreamVolume(double volume, JSONObject customData) Sets the stream volume.
PendingResult<RemoteMediaClient.MediaChannelResult> | setStreamVolume(double volume) Sets the stream volume of the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | setTextTrackStyle(TextTrackStyle trackStyle) Sets the text track style.
PendingResult<RemoteMediaClient.MediaChannelResult> | stop(JSONObject customData) Stops playback of the current media item.
PendingResult<RemoteMediaClient.MediaChannelResult> | stop() Stops playback of the current media item.
void | togglePlayback() Toggles remote media playback.

[Expand] Inherited Methods
From class java.lang.Object
Object | clone()
boolean | equals(Object arg0)
void | finalize()
final Class<?> | getClass()
int | hashCode()
final void | notify()
final void | notifyAll()
String | toString()
final void | wait(long arg0, int arg1)
final void | wait(long arg0)
final void | wait()
From interface com.google.android.gms.cast.Cast.MessageReceivedCallback
abstract void | onMessageReceived(CastDevice castDevice, String namespace, String message) Called when a message is received from a given `CastDevice`.

## Constants

#### public static final int RESUME_STATE_PAUSE

A resume state indicating that the player should be paused, regardless of its current state.

Constant Value: 2 (0x00000002)

#### public static final int RESUME_STATE_PLAY

A resume state indicating that the player should be playing, regardless of its current state.

Constant Value: 1 (0x00000001)

#### public static final int RESUME_STATE_UNCHANGED

A resume state indicating that the player state should be left unchanged.

Constant Value: 0 (0x00000000)

#### public static final int STATUS_FAILED

A status indicating that a request failed. Equivalent to `CastStatusCodes.FAILED`.

Constant Value: 2100 (0x00000834)

#### public static final int STATUS_REPLACED

A status indicating that the request's progress is no longer being tracked because another request of the same type has been made before the first request completed. This applies to requests such as volume change, where a new request invalidates the results of a previous one. Equivalent to `CastStatusCodes.REPLACED`.

Constant Value: 2103 (0x00000837)

#### public static final int STATUS_SUCCEEDED

A status indicating that a request completed successfully. Equivalent to `CastStatusCodes.SUCCESS`.

Constant Value: 0 (0x00000000)

## Fields

#### public static final String NAMESPACE

Returns the namespace used by the `RemoteMediaClient` to send media commands.

## Public Methods

#### public void addListener (RemoteMediaClient.Listener listener)

Adds the `RemoteMediaClient.Listener` to get status updates.

#### public boolean addProgressListener (RemoteMediaClient.ProgressListener listener, long periodMs)

Adds the `RemoteMediaClient.ProgressListener` to the progress updates. A registered listener can not be registered again with a different period. You must remove the existing listener first by calling `removeProgressListener(ProgressListener)`.

##### Parameters

listener | The `RemoteMediaClient.ProgressListener`.
periodMs | Amount of time in milliseconds between subsequent updates.

##### Returns

- `true` if `listener` is added. Returns `false` if `listener` was added before.

#### public long getApproximateStreamPosition ()

Returns the approximate stream position as calculated from the last received stream information and the elapsed wall-time since that update.

##### Returns

- The approximate stream position, in milliseconds.

#### public MediaQueueItem getCurrentItem ()

Returns the current item in the queue, or `null` if the queue is empty.

#### public int getIdleReason ()

Returns the current idle reason.

#### public MediaQueueItem getLoadingItem ()

Returns the currently loading item in the queue, or `null` if no item is being loaded.

#### public MediaInfo getMediaInfo ()

Returns the current media information, or `null` if there isn't a media session.

#### public MediaStatus getMediaStatus ()

Returns the current media status, or `null` if there isn't a media session..

#### public String getNamespace ()

Returns the media control namespace.

#### public int getPlayerState ()

Returns the current player state. One of `PLAYER_STATE_UNKNOWN`, `PLAYER_STATE_IDLE`, `PLAYER_STATE_BUFFERING`, `PLAYER_STATE_PAUSED` and `PLAYER_STATE_PLAYING`.

#### public MediaQueueItem getPreloadedItem ()

Returns the currently preloaded item in the queue, or `null` if no item has been preloaded.

#### public long getStreamDuration ()

Convenience method for getting the stream duration.

##### Returns

- The stream duration, in milliseconds.

#### public boolean hasMediaSession ()

Returns `true` if there is a media session, that is, media is loaded on the remote receiver. Otherwise returns `false`.

#### public boolean isBuffering ()

Returns `true` if the current media is buffering.

#### public boolean isLiveStream ()

Returns `true` if the currently loaded media is a live stream, otherwise returns `false`.

#### public boolean isLoadingNextItem ()

Returns `true` if the next item is being loaded.

#### public boolean isPaused ()

Returns `true` if the current media is paused.

#### public boolean isPlaying ()

Returns `true` if the current media is playing.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> load (MediaInfo mediaInfo, boolean autoplay, long playPosition)

Loads and optionally starts playback of a new media item. The media item starts playback at `playPosition`.

##### Parameters

mediaInfo | An object describing the media item to load. Must not be `null`.
autoplay | Whether playback should start immediately.
playPosition | The initial playback position, in milliseconds from the beginning of the stream.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> load (MediaInfo mediaInfo, boolean autoplay, long playPosition, long[] activeTrackIds, JSONObject customData)

Loads and optionally starts playback of a new media item. The media item starts playback at `playPosition`. This method optionally sends custom data as a `JSONObject` with the load request. Also, it optionally sends an array of track IDs that should be active. If the array is not provided, the default tracks will be used.

##### Parameters

mediaInfo | An object describing the media item to load. Must not be `null`.
autoplay | Whether playback should start immediately.
playPosition | The initial playback position, in milliseconds from the beginning of the stream.
activeTrackIds | The list of track IDs to use when loading the media, may be `null`.
customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> load (MediaInfo mediaInfo)

Loads and automatically starts playback of a new media item.

##### Parameters

mediaInfo | An object describing the media item to load. Must not be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> load (MediaInfo mediaInfo, boolean autoplay, long playPosition, JSONObject customData)

Loads and optionally starts playback of a new media item. The media item starts playback at `playPosition`. This method optionally sends custom data as a `JSONObject` with the load request.

##### Parameters

mediaInfo | An object describing the media item to load. Must not be `null`.
autoplay | Whether playback should start immediately.
playPosition | The initial playback position, in milliseconds from the beginning of the stream.
customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> load (MediaInfo mediaInfo, boolean autoplay)

Loads and optionally starts playback of a new media item.

##### Parameters

mediaInfo | An object describing the media item to load. Must not be `null`.
autoplay | Whether playback should start immediately.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public void onMessageReceived (CastDevice castDevice, String namespace, String message)

Called when a message is received from a given `CastDevice`.

##### Parameters

castDevice | The castDevice from whence the message originated.
namespace | The namespace of the received message.
message | The received payload for the message.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> pause ()

Pauses playback of the current media item.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> pause (JSONObject customData)

Pauses playback of the current media item.

##### Parameters

customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> play ()

Begins (or resumes) playback of the current media item.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> play (JSONObject customData)

Begins (or resumes) playback of the current media item.

##### Parameters

customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueAppendItem (MediaQueueItem item, JSONObject customData)

Appends a new media item to the end of the queue.

##### Parameters

item | The item to append. Must not be `null`.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException |

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueInsertAndPlayItem (MediaQueueItem item, int insertBeforeItemId, long playPosition, JSONObject customData)

A convenience method that inserts a single item into the queue and starts playing it at the specified position.

##### Parameters

item | The item to insert. Must not be `null`.
insertBeforeItemId | ID of the item that will be located immediately after the inserted item. If the value is `INVALID_ITEM_ID`, or no item with this ID can be found, the inserted item will be appended to the end of the queue.
playPosition | The initial playback position for the item when it is first played, in milliseconds from the beginning of the stream. This value is ignored when the same item is played again, for example, when the queue repeats, or this item is later jumped to. In those cases the item's `startTime` is used.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If `playPosition` is negative.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueInsertAndPlayItem (MediaQueueItem item, int insertBeforeItemId, JSONObject customData)

A convenience method that inserts a single item into the queue and starts playing it.

##### Parameters

item | The item to insert. Must not be `null`.
insertBeforeItemId | ID of the item that will be located immediately after the inserted item. If the value is `INVALID_ITEM_ID`, or no item with this ID can be found, the inserted item will be appended to the end of the queue.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueInsertItems (MediaQueueItem[] itemsToInsert, int insertBeforeItemId, JSONObject customData)

Inserts a list of new media items into the queue.

##### Parameters

itemsToInsert | List of items to insert into the queue, in the order that they should be played. The itemId field of the items should be unassigned or the request will fail with an INVALID_PARAMS error. Must not be `null` or empty.
insertBeforeItemId | ID of the item that will be located immediately after the inserted list. If the value is `INVALID_ITEM_ID` or invalid, the inserted list will be appended to the end of the queue.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If `itemsToInsert` is `null` or empty.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueJumpToItem (int itemId, JSONObject customData)

Plays the item with `itemId` in the queue. If `itemId` is not found in the queue, this method will report success without sending a request to the receiver.

##### Parameters

itemId | The ID of the item to which to jump.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueJumpToItem (int itemId, long playPosition, JSONObject customData)

Plays the item with `itemId` in the queue. The media item starts playback at `playPosition`. If `itemId` is not found in the queue, this method will report success without sending a request to the receiver.

##### Parameters

itemId | The ID of the item to which to jump.
playPosition | The initial playback position for the item when it is first played, in milliseconds from the beginning of the stream. This value is ignored when the same item is played again, for example, when the queue repeats, or this item is later jumped to. In those cases the item's `startTime` is used.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If `playPosition` is negative.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueLoad (MediaQueueItem[] items, int startIndex, int repeatMode, long playPosition, JSONObject customData)

Loads and optionally starts playback of a new queue of media items. The media item at `startIndex` starts playback at `playPosition`.

##### Parameters

items | Array of items to load, in the order that they should be played. Must not be `null` or empty.
startIndex | The array index of the item in the `items` array that should be played first (that is, it will become the currentItem). If `repeatMode` is `REPEAT_MODE_REPEAT_OFF` playback will end when the last item in the array is played. This may be useful for continuation scenarios where the user was already using the sender application and in the middle decides to cast. This lets the sender application avoid mapping between the local and remote queue positions and/or avoid issuing an extra request to update the queue. This value must be less than the length of `items`.
repeatMode | The repeat playback mode for the queue. One of `REPEAT_MODE_REPEAT_OFF`, `REPEAT_MODE_REPEAT_ALL`, `REPEAT_MODE_REPEAT_SINGLE` or `REPEAT_MODE_REPEAT_ALL_AND_SHUFFLE`.
playPosition | The initial playback position for the item at `startIndex` when it is first played, in milliseconds from the beginning of the stream. This value is ignored if the same item is played again, for example, when the queue repeats, or this item is later jumped to. In those cases the item's `startTime` is used.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If `items` is `null` or empty, `startIndex` is out of range, or `playPosition` is negative.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueLoad (MediaQueueItem[] items, int startIndex, int repeatMode, JSONObject customData)

Loads and optionally starts playback of a new queue of media items.

##### Parameters

items | Array of items to load, in the order that they should be played. Must not be `null` or empty.
startIndex | The array index of the item in the `items` array that should be played first (that is, it will become the currentItem). If `repeatMode` is `REPEAT_MODE_REPEAT_OFF` playback will end when the last item in the array is played. This may be useful for continuation scenarios where the user was already using the sender application and in the middle decides to cast. This lets the sender application avoid mapping between the local and remote queue positions and/or avoid issuing an extra request to update the queue. This value must be less than the length of `items`.
repeatMode | The repeat playback mode for the queue. One of `REPEAT_MODE_REPEAT_OFF`, `REPEAT_MODE_REPEAT_ALL`, `REPEAT_MODE_REPEAT_SINGLE` or `REPEAT_MODE_REPEAT_ALL_AND_SHUFFLE`.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If `items` is `null` or empty, or `startIndex` is out of range.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueMoveItemToNewIndex (int itemId, int newIndex, JSONObject customData)

Moves the item with `itemId` to a new position in the queue. If `itemId` is not found in the queue, either because it wasn't there originally or it was removed by another sender before calling this method, this method will silently return without sending a request to the receiver.

##### Parameters

itemId | The ID of the item to be moved.
newIndex | The new index of the item. If the value is negative, an error `INVALID_REQUEST` will be returned. If the value is out of bounds, or becomes out of bounds because the queue was shortened by another sender while this request is in progress, the item will be moved to the end of the queue.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueNext (JSONObject customData)

Jumps to the next item in the queue.

##### Parameters

customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queuePrev (JSONObject customData)

Jumps to the previous item in the queue.

##### Parameters

customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueRemoveItem (int itemId, JSONObject customData)

Removes the item with `itemId` from the queue. If `itemId` is not found in the queue, this method will silently return without sending a request to the receiver. A `itemId` may not be in the queue because it wasn't originally in the queue, or it was removed by another sender.

##### Parameters

itemId | The ID of the item to be removed.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueRemoveItems (int[] itemIdsToRemove, JSONObject customData)

Removes a list of items from the queue. If the remaining queue is empty, the media session will be terminated.

##### Parameters

itemIdsToRemove | The list of media item IDs to remove. Must not be `null` or empty.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException |

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueReorderItems (int[] itemIdsToReorder, int insertBeforeItemId, JSONObject customData)

Reorder a list of media items in the queue.

##### Parameters

itemIdsToReorder | The list of media item IDs to reorder, in the new order. Any other items currently in the queue will maintain their existing order. The list will be inserted just before the item specified by `insertBeforeItemId`, or at the end of the queue if `insertBeforeItemId` is `INVALID_ITEM_ID`. For example: If insertBeforeItemId is not specified Existing queue: "A","D","G","H","B","E" itemIds: "D","H","B" New Order: "A","G","E","D","H","B" If insertBeforeItemId is "A" Existing queue: "A","D","G","H","B" itemIds: "D","H","B" New Order: "D","H","B","A","G","E" If insertBeforeItemId is "G" Existing queue: "A","D","G","H","B" itemIds: "D","H","B" New Order: "A","D","H","B","G","E" Items that do not exist will be ignored Must not be `null` or empty.
insertBeforeItemId | ID of the item that will be located immediately after the reordered list. If set to `INVALID_ITEM_ID`, the reordered list will be appended at the end of the queue.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException |

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueSetRepeatMode (int repeatMode, JSONObject customData)

Sets the repeat mode of the queue.

##### Parameters

repeatMode | The repeat playback mode for the queue.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> queueUpdateItems (MediaQueueItem[] itemsToUpdate, JSONObject customData)

Updates properties of a subset of the existing items in the media queue.

##### Parameters

itemsToUpdate | List of queue items to be updated. The items will retain the existing order and will be fully replaced with the ones provided, including the media information. Any other items currently in the queue will remain unchanged. The tracks information can not change once the item is loaded (if the item is the currentItem). Items that do not exist will be ignored.
customData | Custom application-specific data to pass along with the request. May be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public void removeListener (RemoteMediaClient.Listener listener)

Removes the `RemoteMediaClient.Listener`.

#### public void removeProgressListener (RemoteMediaClient.ProgressListener listener)

Removes the `RemoteMediaClient.ProgressListener`.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> requestStatus ()

Requests updated media status information from the receiver. `RemoteMediaClient.Listener` callback will be triggered, when the updated media status has been received. This will also update the internal state of the `RemoteMediaClient` object with the current state of the receiver, including the current session ID. This method should be called when joining an application that supports the media control namespace.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> seek (long position)

Seeks to a new position within the current media item.

##### Parameters

position | The new position, in milliseconds from the beginning of the stream.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> seek (long position, int resumeState, JSONObject customData)

Seeks to a new position within the current media item.

##### Parameters

position | The new position, in milliseconds from the beginning of the stream.
resumeState | The action to take after the seek operation has finished.
customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> seek (long position, int resumeState)

Seeks to a new position within the current media item.

##### Parameters

position | The new position, in milliseconds from the beginning of the stream.
resumeState | The action to take after the seek operation has finished. One of `RESUME_STATE_UNCHANGED`, `RESUME_STATE_PAUSE`, and `RESUME_STATE_PLAY`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> setActiveMediaTracks (long[] trackIds)

Sets the active media tracks.

##### Parameters

trackIds | The media track IDs. If an empty array, the current set of active `trackIds` will be removed.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If `trackIds` is `null`.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> setStreamMute (boolean muted)

Toggles the stream muting.

##### Parameters

muted | `true` if the stream should be muted. `false` if the stream should be unmuted.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> setStreamMute (boolean muted, JSONObject customData)

Toggles the stream muting.

##### Parameters

muted | `true` if the stream should be muted. `false` if the stream should be unmuted.
customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> setStreamVolume (double volume, JSONObject customData)

Sets the stream volume. If `volume` is outside of the range [0.0, 1.0], then the value will be clipped.

##### Parameters

volume | The new volume, in the range [0.0 - 1.0].
customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If the `volume` is infinity or NaN.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> setStreamVolume (double volume)

Sets the stream volume of the current media item. When the stream volume has been updated, `onStatusUpdated()` will be called.

##### Parameters

volume | The new volume, in the range [0.0 - 1.0].

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If the `volume` is infinity or NaN.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> setTextTrackStyle (TextTrackStyle trackStyle)

Sets the text track style.

##### Parameters

trackStyle | The track style. Must not be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

##### Throws

IllegalArgumentException | If the `trackStyle` is `null`.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> stop (JSONObject customData)

Stops playback of the current media item.

##### Parameters

customData | Custom application-specific data to pass along with the request, may be `null`.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public PendingResult<RemoteMediaClient.MediaChannelResult> stop ()

Stops playback of the current media item.

##### Returns

- A `PendingResult` which can be used to track the progress of the request.

#### public void togglePlayback ()

Toggles remote media playback.