blob: 4f0b1e90991c0fe5b61d548764ff8f5b9973c705 [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.support.v7.media;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
/**
* Constants for media control intents.
* <p>
* This class declares a set of standard media control intent categories and actions that
* applications can use to identify the capabilities of media routes and control them.
* </p>
*
* <h3>Media control intent categories</h3>
* <p>
* Media control intent categories specify means by which applications can
* send media to the destination of a media route. Categories are sometimes referred
* to as describing "types" or "kinds" of routes.
* </p><p>
* For example, if a route supports the {@link #CATEGORY_REMOTE_PLAYBACK remote playback category},
* then an application can ask it to play media remotely by sending a {@link #ACTION_PLAY play}
* intent with the Uri of the media content to play. Such a route may then be referred to as
* a "remote playback route" because it supports remote playback requests. It is common
* for a route to support multiple categories of requests at the same time, such as
* live audio and live video.
* </p><p>
* The following standard route categories are defined.
* </p><ul>
* <li>{@link #CATEGORY_LIVE_AUDIO Live audio}: The route supports streaming live audio
* from the device to the destination. Live audio routes include local speakers
* and Bluetooth headsets.
* <li>{@link #CATEGORY_LIVE_VIDEO Live video}: The route supports streaming live video
* from the device to the destination. Live video routes include local displays
* and wireless displays that support mirroring and
* {@link android.app.Presentation presentations}. Live video routes typically also
* support live audio capabilities.
* <li>{@link #CATEGORY_REMOTE_PLAYBACK Remote playback}: The route supports sending
* remote playback requests for media content to the destination. The content to be
* played is identified by a Uri and mime-type.
* </ul><p>
* Media route providers may define custom media control intent categories of their own in
* addition to the standard ones. Custom categories can be used to provide a variety
* of features to applications that recognize and know how to use them. For example,
* a media route provider might define a custom category to indicate that its routes
* support a special device-specific control interface in addition to other
* standard features.
* </p><p>
* Applications can determine which categories a route supports by using the
* {@link MediaRouter.RouteInfo#supportsControlCategory MediaRouter.RouteInfo.supportsControlCategory}
* or {@link MediaRouter.RouteInfo#getControlFilters MediaRouter.RouteInfo.getControlFilters}
* methods. Applications can also specify the types of routes that they want to use by
* creating {@link MediaRouteSelector media route selectors} that contain the desired
* categories and are used to filter routes in several parts of the media router API.
* </p>
*
* <h3>Media control intent actions</h3>
* <p>
* Media control intent actions specify particular functions that applications
* can ask the destination of a media route to perform. Media route control requests
* take the form of intents in a similar manner to other intents used to start activities
* or send broadcasts. The difference is that media control intents are directed to
* routes rather than activity or broadcast receiver components.
* </p><p>
* Each media route control intent specifies an action, a category and some number of parameters.
* Applications send media control requests to routes using the
* {@link MediaRouter.RouteInfo#sendControlRequest MediaRouter.RouteInfo.sendControlRequest}
* method and receive results via a callback.
* </p><p>
* All media control intent actions are associated with the media control intent categories
* that support them. Thus only remote playback routes may perform remote playback actions.
* The documentation of each action specifies the category to which the action belongs,
* the parameters it requires, and the results it returns.
* </p>
*
* <h3>Live audio and live video routes</h3>
* <p>
* {@link #CATEGORY_LIVE_AUDIO Live audio} and {@link #CATEGORY_LIVE_VIDEO live video}
* routes present media using standard system interfaces such as audio streams,
* {@link android.app.Presentation presentations} or display mirroring. These routes are
* the easiest to use because applications simply render content locally on the device
* and the system streams it to the route destination automatically.
* </p><p>
* In most cases, applications can stream content to live audio and live video routes in
* the same way they would play the content locally without any modification. However,
* applications may also be able to take advantage of more sophisticated features such
* as second-screen presentation APIs that are particular to these routes.
* </p>
*
* <h3>Remote playback routes</h3>
* <p>
* Remote playback routes present media remotely by playing content from a Uri.
* These routes destinations take responsibility for fetching and rendering content
* on their own. Applications do not render the content themselves; instead, applications
* send control requests to initiate playback, pause, resume, or manipulate queues of
* media items and receive status updates when the state of each item changes.
* This allows applications to queue several items to play one after another and
* provide feedback to the user as playback progresses.
* </p>
*
* <h4>Actions</h4>
* <p>
* The following actions are defined:
* </p><ul>
* <li>{@link #ACTION_PLAY Play}: Starts playing or enqueues content specified by a given Uri
* and returns a new media item id to describe the request. Implicitly creates a new
* queue of media items if none was specified.
* <li>{@link #ACTION_CANCEL Cancel}: Cancels playback of a media item and removes it
* from the queue of items to be played.
* <li>{@link #ACTION_SEEK Seek}: Sets the content playback position of a media item.
* <li>{@link #ACTION_GET_STATUS Get status}: Gets the status of a media item including
* the item's current playback position and progress.
* <li>{@link #ACTION_PAUSE_QUEUE Pause queue}: Pauses a queue of media items.
* <li>{@link #ACTION_RESUME_QUEUE Resume queue}: Resumes a queue of media items.
* <li>{@link #ACTION_CLEAR_QUEUE Clear queue}: Cancels and removes all items from a
* media queue.
* </ul>
*
* <h4>Media items</h4>
* <p>
* Each successful {@link #ACTION_PLAY play action} returns a unique media item id that
* an application can use to monitor and control playback. The media item id may be passed
* to other actions such as {@link #ACTION_CANCEL cancel}, {@link #ACTION_SEEK seek}
* or {@link #ACTION_GET_STATUS get status}. It will also appear as a parameter in
* status update broadcasts to identify the associated playback request.
* </p>
*
* <h4>Queues</h4>
* <p>
* Each successful {@link #ACTION_PLAY play action} has the effect of adding a new media
* item to a queue of media items to be played. Queues are created implicitly as part
* of issuing playback requests and are identified by unique queue ids.
* </p><p>
* There is at most one valid queue in existence at any given time for a given route.
* If an application sends a request that has the effect of creating a new queue then
* the previously valid queue is cleared and all of its items are canceled before the
* new queue is created. In this way, one application can determine when another
* application has taken control of a route because its own items will all be canceled
* as soon as the other application begins playing something else.
* </p><p>
* Queues are intended to hold a small number of items to help media routes optimize
* the playback experience. As each item in the queue completes playback, the next item
* in the queue should begin playing immediately without delay.
* </p><p>
* It is usually sufficient for an application to enqueue no more than a few items at a time
* to ensure continuous playback. Typically the application will start by enqueuing two
* media items at once: one item to play now and one item to play next. When the first
* item finishes, the second item will begin playing immediately. The application will
* receive one status update broadcast indicating that the first item finished playing
* and another status update broadcast indicating that the second item has started playing.
* Upon receipt of such broadcasts, the application may choose to enqueue another media
* item to play once the second one finishes.
* </p><p>
* Media route providers are required to support queues of at least 3 items.
* </p>
*/
public final class MediaControlIntent {
/**
* Media control category: Live audio.
* <p>
* A route that supports live audio routing will allow the media audio stream
* to be sent to supported destinations. This can include internal speakers or
* audio jacks on the device itself, A2DP devices, and more.
* </p><p>
* When a live audio route is selected, audio routing is transparent to the application.
* All audio played on the media stream will be routed to the selected destination.
* </p>
*/
public static final String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
/**
* Media control category: Live video.
* <p>
* A route that supports live video routing will allow a mirrored version
* of the device's primary display or a customized
* {@link android.app.Presentation Presentation} to be sent to supported
* destinations.
* </p><p>
* When a live video route is selected, audio and video routing is transparent
* to the application. By default, audio and video is routed to the selected
* destination. For certain live video routes, the application may also use a
* {@link android.app.Presentation Presentation} to replace the mirrored view
* on the external display with different content.
* </p>
*
* @see MediaRouter.RouteInfo#getPresentationDisplay()
* @see android.app.Presentation
*/
public static final String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
/**
* Media control category: Remote playback.
* <p>
* A route that supports remote playback routing will allow an application to send
* requests to play content remotely to supported destinations.
* </p><p>
* Remote playback routes destinations operate independently of the local device.
* When a remote playback route is selected, the application can control the content
* playing on the destination by sending media control actions to the route.
* The application may also receive status updates from the route regarding
* remote playback.
* </p>
*
* @see MediaRouter.RouteInfo#sendControlRequest
*/
public static final String CATEGORY_REMOTE_PLAYBACK =
"android.media.intent.category.REMOTE_PLAYBACK";
/**
* Media control action: Play media item.
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action causes a remote playback route to start playing content with
* the {@link Uri} specified in the {@link Intent}'s {@link Intent#getData() data uri}.
* The action returns a media item id which can be used to control playback
* using other remote playback actions.
* </p><p>
* Once initiated, playback of the specified content will be queued and managed
* independently by the destination. The application will receive status updates
* as the content is played.
* </p><p>
* If the data uri specifies an HTTP or HTTPS scheme, then the destination is
* responsible for following HTTP redirects to a reasonable depth of at least 3
* levels as might typically be handled by a web browser. If an HTTP error
* occurs, then the destination should send a {@link MediaItemStatus status update}
* back to the client indicating the {@link MediaItemStatus#PLAYBACK_STATE_ERROR error}
* {@link MediaItemStatus#getPlaybackState() playback state}
* and include the {@link MediaItemStatus#getHttpStatusCode() HTTP status code}.
* </p>
*
* <h3>Queuing</h3>
* <p>
* This request has the effect of implicitly creating a media queue whenever the
* application does not specify the {@link #EXTRA_QUEUE_ID} parameter. Because there
* can only be one valid queue at a time, creating a new queue has the side-effect
* of invalidating any existing queues and canceling all of their items before
* enqueuing the new playback request media item onto the newly created queue.
* </p><p>
* If the application specifies an invalid queue id, then the request has no effect
* and an error is returned. The application may then ask that a new queue be
* created (and the current one invalidated) by issuing a new playback request without
* a queue id parameter. However, it should only do this at the user's request
* (say, by the user explicitly clicking a play button) since another application may
* be trying to take control of the route.
* </p><p>
* For more information on queuing, please refer to the class documentation.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(optional)</i>: specifies the queue id of the queue
* to which the new playback request should be appended. If omitted, a new queue
* is created.
* <li>{@link #EXTRA_ITEM_CONTENT_POSITION} <i>(optional)</i>: specifies the initial
* content playback position.
* <li>{@link #EXTRA_ITEM_METADATA} <i>(optional)</i>: specifies metadata associated
* with the content such as the title of a song.
* <li>{@link #EXTRA_ITEM_HTTP_HEADERS} <i>(optional)</i>: specifies HTTP headers to
* supply to the server when fetching the content.
* <li>{@link #EXTRA_ITEM_STATUS_UPDATE_RECEIVER} <i>(optional)</i>: specifies a
* {@link PendingIntent} for a broadcast receiver that will receive status updates
* about the media item.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to which the new media item was appended. This will be a new queue in
* the case where no queue id was supplied as a parameter.
* <li>{@link #EXTRA_ITEM_ID} <i>(required)</i>: specifies an opaque string identifier
* to use to refer to the media item in subsequent requests such as {@link #ACTION_CANCEL}.
* <li>{@link #EXTRA_ITEM_STATUS} <i>(required)</i>: specifies the initial status of
* the item that has been enqueued.
* </ul>
*
* <h3>Status updates</h3>
* <p>
* If the client supplies a {@link #EXTRA_ITEM_STATUS_UPDATE_RECEIVER status update receiver}
* then the media route provider is responsible for sending status updates to the receiver
* when significant media item state changes occur such as when playback starts or
* stops. The receiver will not be invoked for content playback position changes.
* The application may retrieve the current playback position when necessary
* using the {@link #ACTION_GET_STATUS} request.
* </p><p>
* Refer to {@link MediaItemStatus} for details.
* </p>
*
* <h3>Example</h3>
* <pre>
* MediaRouter mediaRouter = MediaRouter.getInstance(context);
* MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();
* Intent intent = new Intent(MediaControlIntent.ACTION_PLAY);
* intent.addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK);
* intent.setDataAndType("http://example.com/videos/movie.mp4", "video/mp4");
* if (route.supportsControlRequest(intent)) {
* MediaRouter.ControlRequestCallback callback = new MediaRouter.ControlRequestCallback() {
* public void onResult(Bundle data) {
* // The request succeeded.
* // Playback may be controlled using the returned queue and item id.
* String queueId = data.getString(MediaControlIntent.EXTRA_QUEUE_ID);
* String itemId = data.getString(MediaControlIntent.EXTRA_ITEM_ID);
* MediaItemStatus status = MediaItemStatus.fromBundle(data.getBundle(
* MediaControlIntent.EXTRA_ITEM_STATUS));
* // ...
* }
*
* public void onError(String message, Bundle data) {
* // An error occurred!
* }
* };
* route.sendControlRequest(intent, callback);
* }</pre>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
* @see #ACTION_CANCEL
* @see #ACTION_SEEK
* @see #ACTION_GET_STATUS
*/
public static final String ACTION_PLAY = "android.media.intent.action.PLAY";
/**
* Media control action: Cancel media item playback.
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action causes a remote playback route to cancel playback of the
* specified media item and remove it from the queue.
* </p><p>
* This action has no effect if the media item's status is
* {@link MediaItemStatus#PLAYBACK_STATE_CANCELED} or
* {@link MediaItemStatus#PLAYBACK_STATE_ERROR}.
* Otherwise the media item's status is set to
* {@link MediaItemStatus#PLAYBACK_STATE_CANCELED}, playback of this media item is
* stopped if it had been playing and the item is removed from the queue (skipped).
* </p><p>
* A status update is sent to the status update receiver indicating the new status
* of the item.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to which the media item belongs.
* <li>{@link #EXTRA_ITEM_ID} (required): specifies the media item id of media item
* to cancel.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li>{@link #EXTRA_ITEM_STATUS} <i>(required)</i>: specifies the new status of the item.
* </ul>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
*/
public static final String ACTION_CANCEL = "android.media.intent.action.CANCEL";
/**
* Media control action: Seek media item to a new playback position.
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action causes a remote playback route to modify the current playback
* position of the specified media item.
* </p><p>
* This action only affects the playback position of the media item; not its playback state.
* If the item is paused, then seeking sets the position but the item remains paused.
* Likewise if the item is playing, then seeking will cause playback to jump to the
* new position and continue playing from that point. If the item has not yet started
* playing, then the new playback position is be remembered and used as the item's
* initial content position when playback eventually begins.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to which the media item belongs.
* <li>{@link #EXTRA_ITEM_ID} <i>(required)</i>: specifies the media item id of
* the media item to seek.
* <li>{@link #EXTRA_ITEM_CONTENT_POSITION} <i>(required)</i>: specifies the new
* content position for playback.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li>{@link #EXTRA_ITEM_STATUS} <i>(required)</i>: specifies the new status of the item.
* </ul>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
*/
public static final String ACTION_SEEK = "android.media.intent.action.SEEK";
/**
* Media control action: Get media item playback status and progress information.
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action asks a remote playback route to provide updated playback status and progress
* information about the specified media item.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to which the media item belongs.
* <li>{@link #EXTRA_ITEM_ID} <i>(required)</i>: specifies the media item id of
* the media item to query.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li>{@link #EXTRA_ITEM_STATUS} <i>(required)</i>: specifies the current status of the item.
* </ul>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
* @see #EXTRA_ITEM_STATUS_UPDATE_RECEIVER
*/
public static final String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
/**
* Media control action: Pause media queue playback.
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action causes playback on the specified media queue to be paused.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to be paused.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li><i>None</i>
* </ul>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
* @see #ACTION_RESUME_QUEUE
*/
public static final String ACTION_PAUSE_QUEUE = "android.media.intent.action.PAUSE_QUEUE";
/**
* Media control action: Resume media queue playback (unpause).
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action causes playback on the specified media queue to be resumed.
* Reverses the effects of {@link #ACTION_PAUSE_QUEUE}.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to be resumed.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li><i>None</i>
* </ul>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
* @see #ACTION_PAUSE_QUEUE
*/
public static final String ACTION_RESUME_QUEUE = "android.media.intent.action.RESUME_QUEUE";
/**
* Media control action: Clear media queue.
* <p>
* Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
* media control.
* </p><p>
* This action causes all media items in the specified media queue to be canceled
* and removed. The queue is left in an empty state.
* </p>
*
* <h3>Request parameters</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the queue id of the queue
* to be cleared.
* </ul>
*
* <h3>Result data</h3>
* <ul>
* <li><i>None</i>
* </ul>
*
* @see MediaRouter.RouteInfo#sendControlRequest
* @see #CATEGORY_REMOTE_PLAYBACK
*/
public static final String ACTION_CLEAR_QUEUE = "android.media.intent.action.CLEAR_QUEUE";
/**
* Bundle extra: Media queue id.
* <p>
* An opaque unique identifier returned as a result from {@link #ACTION_PLAY} that
* represents the queue of media items to which an item was appended. Subsequent
* playback requests may specify the same queue id to enqueue addition items onto
* the same queue.
* </p><p>
* Used with various actions to specify the id of the media queue to be controlled.
* </p><p>
* Included in broadcast intents sent to
* {@link #EXTRA_ITEM_STATUS_UPDATE_RECEIVER status update receivers} to identify
* the queue to which the item in question belongs.
* </p><p>
* The value is a unique string value generated by the media route provider
* to represent one particular media queue.
* </p>
*
* @see #ACTION_PLAY
* @see #ACTION_CANCEL
* @see #ACTION_SEEK
* @see #ACTION_GET_STATUS
* @see #ACTION_PAUSE_QUEUE
* @see #ACTION_RESUME_QUEUE
* @see #ACTION_CLEAR_QUEUE
*/
public static final String EXTRA_QUEUE_ID =
"android.media.intent.extra.QUEUE_ID";
/**
* Bundle extra: Media item id.
* <p>
* An opaque unique identifier returned as a result from {@link #ACTION_PLAY} that
* represents the media item that was created by the playback request.
* </p><p>
* Used with various actions to specify the id of the media item to be controlled.
* </p><p>
* Included in broadcast intents sent to
* {@link #EXTRA_ITEM_STATUS_UPDATE_RECEIVER status update receivers} to identify
* the item in question.
* </p><p>
* The value is a unique string value generated by the media route provider
* to represent one particular media item.
* </p>
*
* @see #ACTION_PLAY
* @see #ACTION_CANCEL
* @see #ACTION_SEEK
* @see #ACTION_GET_STATUS
*/
public static final String EXTRA_ITEM_ID =
"android.media.intent.extra.ITEM_ID";
/**
* Bundle extra: Media item status.
* <p>
* Returned as a result from media item actions such as {@link #ACTION_PLAY},
* {@link #ACTION_SEEK}, {@link #ACTION_CANCEL} and {@link #ACTION_GET_STATUS}
* to describe the status of the relevant media item.
* </p><p>
* Included in broadcast intents sent to
* {@link #EXTRA_ITEM_STATUS_UPDATE_RECEIVER status update receivers} to provide
* updated status information.
* </p><p>
* The value is a {@link android.os.Bundle} of data that can be converted into
* a {@link MediaItemStatus} object using
* {@link MediaItemStatus#fromBundle MediaItemStatus.fromBundle}.
* </p>
*
* @see #ACTION_PLAY
* @see #ACTION_CANCEL
* @see #ACTION_SEEK
* @see #ACTION_GET_STATUS
*/
public static final String EXTRA_ITEM_STATUS =
"android.media.intent.extra.ITEM_STATUS";
/**
* Double extra: Media item content position.
* <p>
* Used with {@link #ACTION_PLAY} to specify the starting playback position.
* </p><p>
* Used with {@link #ACTION_SEEK} to set a new playback position.
* </p><p>
* The value is a double-precision floating point number of seconds
* from the beginning of the content.
* <p>
*
* @see #ACTION_PLAY
* @see #ACTION_SEEK
*/
public static final String EXTRA_ITEM_CONTENT_POSITION =
"android.media.intent.extra.ITEM_POSITION";
/**
* Bundle extra: Media item metadata.
* <p>
* Used with {@link #ACTION_PLAY} to specify metadata associated with the content
* of a media item.
* </p><p>
* The value is a {@link android.os.Bundle} of metadata key-value pairs as defined
* in {@link MediaItemMetadata}.
* </p>
*
* @see #ACTION_PLAY
*/
public static final String EXTRA_ITEM_METADATA =
"android.media.intent.extra.ITEM_METADATA";
/**
* Bundle extra: HTTP headers.
* <p>
* Used with {@link #ACTION_PLAY} to specify HTTP headers to be included when
* fetching to the content indicated by the media item's data Uri.
* </p><p>
* This extra may be used to provide authentication tokens and other
* parameters to the server separately from the media item's data Uri.
* </p><p>
* The value is a {@link android.os.Bundle} of string based key-value pairs
* that describe the HTTP headers.
* </p>
*
* @see #ACTION_PLAY
*/
public static final String EXTRA_ITEM_HTTP_HEADERS =
"android.media.intent.extra.HTTP_HEADERS";
/**
* Bundle extra: Media item status update receiver.
* <p>
* Used with {@link #ACTION_PLAY} to specify a {@link PendingIntent} for a
* broadcast receiver that will receive status updates about a particular
* media item.
* </p><p>
* Whenever the status of the media item changes, the media route provider will
* send a broadcast to the pending intent with extras that identify the queue
* to which the item belongs, the item itself and the item's updated status.
* </p><p>
* The same pending intent and broadcast receiver may be shared by any number of
* media items since the broadcast intent includes the media queue id and media item id.
* </p><p>
* The value is a {@link PendingIntent}.
* </p>
*
* <h3>Broadcast extras</h3>
* <ul>
* <li>{@link #EXTRA_QUEUE_ID} <i>(required)</i>: specifies the media queue id of the
* queue to which the item in question belongs.
* <li>{@link #EXTRA_ITEM_ID} <i>(required)</i>: specifies the media item id of the
* media item in question.
* <li>{@link #EXTRA_ITEM_STATUS} <i>(required)</i>: specifies the status of the
* item as a bundle that can be decoded into a {@link MediaItemStatus} object.
* </ul>
*
* @see #ACTION_PLAY
*/
public static final String EXTRA_ITEM_STATUS_UPDATE_RECEIVER =
"android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
private MediaControlIntent() {
}
}