รูปแบบคิวในการแคสต์จะแตกต่างจาก
MediaSession
ไลบรารีของ Cast Connect ไม่รองรับการอ่านคิวที่ให้บริการโดย
MediaSession
จัดการการโหลดคิวและการตั้งค่าข้อมูลคิว
การโหลดคิวจะดำเนินการในลักษณะเดียวกับการโหลดรายการเดียว (ผ่านการเริ่มต้น
กิจกรรมที่มีเป้าหมาย) คุณต้องใช้ไลบรารีของไคลเอ็นต์เพื่อแยกวิเคราะห์ Intent
เป็น
MediaLoadRequestData
MediaQueueData
มีข้อมูลคิวที่จะโหลด
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(...); } }
การเปลี่ยนคิว
เมื่อมีการเปลี่ยนแปลงคิว (เช่น จาก queueInsert()
) คุณสามารถใช้
MediaQueueManager
เพื่ออัปเดตคิว หากคุณกำลังสร้างรายการคิวใหม่ อย่าลืมตั้งค่า
รหัสสินค้าด้วยการโทร
setItemId()
ในเครื่องมือสร้างโดยใช้
MediaQueueManager.autoGenerateItemId()
เพื่อสร้างรหัสรายการ รายการในคิวที่โหลดผ่าน
setDataFromLoad()
ตั้งรหัสสินค้าไว้แล้ว
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 ยังจัดการ
onQueueUpdate()
Callback เพื่อรองรับการข้ามไปยังรายการในคิวและข้ามถัดไป/ก่อนหน้า
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());
การจัดการการควบคุมการรับส่งข้อมูลที่เกี่ยวข้องกับคิว
นอกจากนี้คุณอาจต้องใช้ Callback การควบคุมการรับส่งข้อมูลที่เกี่ยวข้องกับคิว เช่น
ในฐานะ
onSkipToNext()
onSkipToPrevious()
,
หรือ
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());