Das Warteschlangenmodell in Cast unterscheidet sich von dem in
MediaSession.
Die Cast Connect-Bibliothek unterstützt das Lesen einer von MediaSession bereitgestellten Warteschlange nicht.
Warteschlange laden und Warteschlangeninformationen festlegen
Das Laden der Warteschlange erfolgt auf dieselbe Weise wie das Laden einzelner Elemente (durch Starten einer Aktivität mit einer Intent). Sie müssen unsere Clientbibliothek verwenden, um die Intent
in ein
MediaLoadRequestData zu parsen.
Das
MediaQueueData
Feld 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(...); } }
Warteschlange ändern
Wenn Änderungen an der Warteschlange vorgenommen werden (z. B. durch queueInsert()), können Sie
MediaQueueManager
verwenden, um die Warteschlange zu aktualisieren. Wenn Sie neue Warteschlangenelemente erstellen, müssen Sie die
Element-ID festlegen. Rufen Sie dazu
setItemId()
für den Builder auf und verwenden Sie
MediaQueueManager.autoGenerateItemId()
, um die Element-ID zu generieren. Für Elemente in der Warteschlange, die über
setDataFromLoad()
geladen wurden, sind die Element-IDs bereits festgelegt.
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 den
onQueueUpdate()
Callback, um das Springen zu Warteschlangenelementen und das Überspringen von Elementen zu unterstützen:
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
Möglicherweise möchten Sie auch warteschlangenbezogene Transportsteuerungs-Callbacks wie
z. B.
onSkipToNext(),
onSkipToPrevious(),
oder
onSkipToQueueItem()implementieren.
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());