MediaControlIntent.java revision c21f57ed68b81a77167f1df000b0e272e1598bc0
1c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown/*
2c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * Copyright (C) 2013 The Android Open Source Project
3c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown *
4c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * you may not use this file except in compliance with the License.
6c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * You may obtain a copy of the License at
7c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown *
8c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown *
10c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * Unless required by applicable law or agreed to in writing, software
11c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * See the License for the specific language governing permissions and
14c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * limitations under the License.
15c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown */
16c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
17c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brownpackage android.support.v4.media;
18c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
19c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brownimport android.content.Intent;
20c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brownimport android.net.Uri;
21c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
22c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown/**
23c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * Constants for identifying media route capabilities and controlling media routes
24c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * by sending an {@link Intent}.
25c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * <p>
26c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * The basic capabilities of a media route may be determined by looking at the
27c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * media control intent categories and actions supported by the route.
28c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * </p><ul>
29c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * <li>A media control intent category specifies the type of the route
30c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * and the manner in which applications send media to its destination.
31c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * <li>A media control intent action specifies a command to be delivered to
32c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * the media route's destination to control media playback.  Media control
33c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * actions may only apply to routes that support certain media control categories.
34c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown * </ul>
35c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown */
36c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brownpublic final class MediaControlIntent {
37c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
38c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Media control category: Live audio.
39c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
40c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * A route that supports live audio routing will allow the media audio stream
41c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * to be sent to supported destinations.  This can include internal speakers or
42c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * audio jacks on the device itself, A2DP devices, and more.
43c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p><p>
44c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * When a live audio route is selected, audio routing is transparent to the application.
45c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * All audio played on the media stream will be routed to the selected destination.
46c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
47c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
48c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
49c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
50c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
51c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Media control category: Live video.
52c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
53c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * A route that supports live video routing will allow a mirrored version
54c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * of the device's primary display or a customized
55c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * {@link android.app.Presentation Presentation} to be sent to supported
56c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * destinations.
57c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p><p>
58c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * When a live video route is selected, audio and video routing is transparent
59c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * to the application.  By default, audio and video is routed to the selected
60c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * destination.  For certain live video routes, the application may also use a
61c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * {@link android.app.Presentation Presentation} to replace the mirrored view
62c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * on the external display with different content.
63c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
64c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
65c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see MediaRouter.RouteInfo#getPresentationDisplay()
66c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see android.app.Presentation
67c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
68c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
69c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
70c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
71c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Media control category: Remote playback.
72c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
73c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * A route that supports remote playback routing will allow an application to send
74c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * requests to play content remotely to supported destinations.
75c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p><p>
76c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Remote playback routes destinations operate independently of the local device.
77c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * When a remote playback route is selected, the application can control the content
78c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * playing on the destination by sending media control actions to the route.
79c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * The application may also receive status updates from the route regarding
80c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * remote playback.
81c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
82c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
83c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see MediaRouter.RouteInfo#sendControlRequest
84c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
85c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String CATEGORY_REMOTE_PLAYBACK =
86c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown            "android.media.intent.category.REMOTE_PLAYBACK";
87c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
88c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
89c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Media control action: Play.
90c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
91c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Used with routes that support {@link #CATEGORY_REMOTE_PLAYBACK remote playback}
92c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * media control.
93c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p><p>
94c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * This action causes a remote playback route to start playing content with
95c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * the {@link Uri} specified in the {@link Intent}'s {@link Intent#getData() data uri}.
96c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p><p>
97c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Once initiated, playback of the specified content will be queued and managed
98c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * independently by the destination.  The application will receive status
99c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * and progress updates as the content is played.
100c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
101c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
102c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <h3>Request parameters</h3>
103c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <ul>
104c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <li>{@link #EXTRA_QUEUE_BEHAVIOR} specifies when the content should be played.
105c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <li>{@link #EXTRA_STREAM_START_POSITION} specifies the start position of the
106c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * content stream to play in seconds.
107c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <li>{@link #EXTRA_STREAM_END_POSITION} specifies the end position of the
108c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * content stream to play in seconds.
109c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <li>{@link #EXTRA_STREAM_METADATA} specifies metadata associated with the
110c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * content stream such as the title of a song.
111c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </ul>
112c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
113c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <h3>Result data</h3>
114c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <ul>
115c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <li>(none)
116c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </ul>
117c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
118c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <h3>Example</h3>
119c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <pre>
120c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * MediaRouter mediaRouter = MediaRouter.getInstance(context);
121c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();
122c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Intent intent = new Intent(MediaControlIntent.ACTION_PLAY);
123c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * intent.addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK);
124c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * intent.setDataAndType("http://example.com/videos/movie.mp4", "video/mp4");
125c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * intent.putExtra(MediaControlIntent.EXTRA_QUEUE_BEHAVIOR,
126c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *         MediaControlIntent.QUEUE_BEHAVIOR_PLAY_NEXT);
127c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
128c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * MediaRouter.ControlRequestCallback callback = new MediaRouter.ControlRequestCallback() {
129c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *     public void onResult(int result, Bundle data) {
130c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *         if (result == REQUEST_SUCCEEDED) {
131c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *             Log.d("Testing", "Play request succeeded!");
132c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *         }
133c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *     }
134c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * };
135c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
136c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * if (route.sendControlRequest(intent, callback)) {
137c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *     Log.d("Testing", "Request to play sent successfully...");
138c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * }</pre>
139c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
140c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see MediaRouter.RouteInfo#sendControlRequest
141c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #CATEGORY_REMOTE_PLAYBACK
142c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
143c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String ACTION_PLAY = "android.media.intent.action.PLAY";
144c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
145c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
146c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Integer extra: Queue behavior.
147c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
148c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Used with {@link #ACTION_PLAY} to specify when the requested content should be
149c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * played.  The default is to play the content immediately.
150c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p><p>
151c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * The value must be one of {@link #QUEUE_BEHAVIOR_PLAY_NOW},
152c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * {@link #QUEUE_BEHAVIOR_PLAY_NEXT}, or {@link #QUEUE_BEHAVIOR_PLAY_LATER}.
153c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
154c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
155c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #ACTION_PLAY
156c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
157c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String EXTRA_QUEUE_BEHAVIOR =
158c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown            "android.media.intent.extra.QUEUE_BEHAVIOR";
159c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
160c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
161c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Value for {@link #EXTRA_QUEUE_BEHAVIOR}: Play now.
162c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
163c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Requests that the new content play immediately, cancelling the currently playing
164c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * media item.  (This is the default queue behavior.)
165c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
166c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
167c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #EXTRA_QUEUE_BEHAVIOR
168c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
169c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public final static int QUEUE_BEHAVIOR_PLAY_NOW = 0;
170c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
171c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
172c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Value for {@link #EXTRA_QUEUE_BEHAVIOR}: Play next.
173c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
174c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Requests that the new content be enqueued to play next after the currently playing
175c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * media item.
176c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
177c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
178c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #EXTRA_QUEUE_BEHAVIOR
179c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
180c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public final static int QUEUE_BEHAVIOR_PLAY_NEXT = 1;
181c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
182c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
183c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Value for {@link #EXTRA_QUEUE_BEHAVIOR}: Play later.
184c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
185c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Requests that the new content be enqueued to play later after all other items
186c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * currently in the queue.
187c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
188c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
189c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #EXTRA_QUEUE_BEHAVIOR
190c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
191c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public final static int QUEUE_BEHAVIOR_PLAY_LATER = 2;
192c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
193c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
194c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Integer extra: Stream start position.
195c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
196c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Used with {@link #ACTION_PLAY} to specify the starting playback position in
197c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * seconds from the beginning of the content stream to be played.
198c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
199c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
200c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #ACTION_PLAY
201c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
202c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String EXTRA_STREAM_START_POSITION =
203c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown            "android.media.intent.extra.STREAM_START_POSITION";
204c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
205c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
206c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Integer extra: Stream end position.
207c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
208c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Used with {@link #ACTION_PLAY} to specify the ending playback position in
209c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * seconds from the beginning of the content stream to be played.
210c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
211c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
212c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #ACTION_PLAY
213c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
214c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String EXTRA_STREAM_END_POSITION =
215c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown            "android.media.intent.extra.STREAM_END_POSITION";
216c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
217c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    /**
218c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Bundle extra: Stream metadata.
219c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * <p>
220c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * Used with {@link #ACTION_PLAY} to specify a {@link Bundle} of metadata that
221c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * describes the media content stream to be played.  The valid metadata keys are
222c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * defined in {@link MediaStreamMetadata}.
223c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * </p>
224c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     *
225c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     * @see #ACTION_PLAY
226c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown     */
227c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    public static final String EXTRA_STREAM_METADATA =
228c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown            "android.media.intent.extra.STREAM_METADATA";
229c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown
230c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    private MediaControlIntent() {
231c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown    }
232c21f57ed68b81a77167f1df000b0e272e1598bc0Jeff Brown}
233