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