Das Warteschlangenmodell in Cast unterscheidet sich von dem in
MediaSession
Die Cast Connect-Bibliothek unterstützt das Lesen von Wiedergabelisten von
MediaSession
Laden der Warteschlange und Festlegen der Warteschlangeninformationen
Das Laden der Warteschlange erfolgt auf die gleiche Weise wie das Laden einzelner Elemente (über das
Aktivitäten mit einem Intent). Zum Parsen des Intents müssen Sie unsere Clientbibliothek verwenden
in ein
MediaLoadRequestData
Die
MediaQueueData
enthält die zu ladenden Warteschlangeninformationen.
fun handleCastLoad(requestData: MediaLoadRequestData?) { if (requestData.getQueueData()) { // If MediaQueueData is specified, this is a queue load request. myPlayer.load( requestData.getQueueData().getItems().get(0)) // Set media status. castReceiverContext.getMediaManager() .setDataFromLoad(requestData) // This clears all status overrides. // The queue information is updated with // the MediaQueueData in the request. ... mediaSession.setPlaybackState(...) } }
private void handleCastLoad(MediaLoadRequestData requestData) { if (requestData.getQueueData()) { // If MediaQueueData is specified, this is a queue load request. myPlayer.load( requestData.getQueueData().getItems().get(0)); // Set media status. castReceiverContext.getMediaManager() .setDataFromLoad(requestData) // This clears all status overrides. // The queue information is updated with // the MediaQueueData in the request. ...; mediaSession.setPlaybackState(...); } }
Ändern der Warteschlange
Bei Änderungen in der Warteschlange (z. B. von queueInsert()
) können Sie Folgendes verwenden:
MediaQueueManager
um die Warteschlange zu aktualisieren. Wenn Sie neue Warteschlangenelemente erstellen, stellen Sie sicher, dass Sie das Feld
Artikel-ID hinzu, indem Sie
setItemId()
auf den Builder mit
MediaQueueManager.autoGenerateItemId()
um die Artikel-ID zu generieren. Elemente in der Warteschlange, die über geladen wurden
setDataFromLoad()
bereits die Artikel-IDs festgelegt haben.
val mediaManager: MediaManager = castReceiverContext.getMediaManager() val mediaQueueManager = mediaManager.getMediaQueueManager() mediaQueueManager.getQueueItems().add( /* position= */index, mediaQueueItem) mediaManager.broadcastMediaStatus()
MediaManager mediaManager = castReceiverContext.getMediaManager(); MediaQueueManager mediaQueueManager = mediaManager.getMediaQueueManager(); mediaQueueManager.getQueueItems().add(/* position= */ index, mediaQueueItem); mediaManager.broadcastMediaStatus();
Android TV-Apps verarbeiten auch
onQueueUpdate()
Rückruf an den Support, um zu Warteschlangenelementen zu springen und „Nächste/Zurück“ zu überspringen:
class MyMediaCommandCallback : MediaCommandCallback() { override fun onQueueUpdate( queueUpdateRequestData: QueueUpdateRequestData ): Task{ ... var newItemId = MediaQueueItem.INVALID_ITEM_ID if (queueUpdateRequestData.getJump() != null) { newItemId = myGetRelativeItemId(queueUpdateRequestData.getJump()) } else if (queueUpdateRequestData.getCurrentItemId() != null) { newItemId = queueUpdateRequestData.getCurrentItemId() } if (newItemId != MediaQueueItem.INVALID_ITEM_ID) { castReceiverContext.getMediaManager().getMediaQueueManager() .setCurrentItemId(newItemId) castReceiverContext.getMediaManager().broadcastMediaStatus() } } } val mediaManager = CastReceiverContext.getInstance().getMediaQueueManager() mediaManager.setMediaCommandCallback(MyMediaCommandCallback())
public class MyMediaCommandCallback extends MediaCommandCallback { @Override public TaskonQueueUpdate( QueueUpdateRequestData queueUpdateRequestData) { ... int newItemId = MediaQueueItem.INVALID_ITEM_ID; if (queueUpdateRequestData.getJump() != null) { newItemId = myGetRelativeItemId(queueUpdateRequestData.getJump()); } else if (queueUpdateRequestData.getCurrentItemId() != null) { newItemId = queueUpdateRequestData.getCurrentItemId(); } if (newItemId != MediaQueueItem.INVALID_ITEM_ID) { castReceiverContext.getMediaManager().getMediaQueueManager() .setCurrentItemId(newItemId); castReceiverContext.getMediaManager().broadcastMediaStatus(); } } MediaManager mediaManager = CastReceiverContext.getInstance().getMediaManager(); mediaManager.setMediaCommandCallback(new MyMediaCommandCallback());
Warteschlangenbezogene Transportsteuerung verarbeiten
Sie können auch warteschlangenbezogene Transportsteuerungs-Callbacks implementieren, z. B.
als
onSkipToNext()
,
onSkipToPrevious()
,
oder
onSkipToQueueItem()
class MyMediaSessionCallback : MediaSessionCompat.Callback() { override fun onSkipToNext() { // Skip to next item in queue ... } override fun onSkipToPrevious() { // Skip to previous item in queue ... } override fun onSkipToQueueItem(pos: Long) { // Skip to specified queue item ... } ... } mediaSession.setCallback(MyMediaSessionCallback())
public class MyMediaSessionCallback extends MediaSessionCompat.Callback { @Override public void onSkipToNext() { // Skip to next item in queue ... } @Override public void onSkipToPrevious() { // Skip to previous item in queue ... } @Override public void onSkipToQueueItem (long pos) { // Skip to specified queue item ... } ... } mediaSession.setCallback(new MyMediaSessionCallback());