แอปสื่อมักประกอบด้วยคอลเล็กชันรายการสื่อที่จัดเป็นลำดับชั้น เช่น เพลงในอัลบั้มหรือตอนของรายการทีวีในเพลย์ลิสต์ ลำดับชั้นของ รายการสื่อเรียกว่าคลังสื่อ
MediaLibraryService
มี API มาตรฐานเพื่อให้บริการและเข้าถึง
ไลบรารีสื่อ ซึ่งจะเป็นประโยชน์ ตัวอย่างเช่น เมื่อเพิ่มการสนับสนุนสำหรับ
Android Auto ไปยังแอปสื่อของคุณ ซึ่งเป็นแอป
UI ที่ปลอดภัยต่อผู้ขับขี่สำหรับคลังสื่อของคุณ
สร้าง MediaLibraryService
การใช้ MediaLibraryService
นั้นคล้ายกับ
กำลังใช้ MediaSessionService
เว้นแต่ว่าในเมธอด onGetSession()
คุณควร
แสดงผล MediaLibrarySession
แทน MediaSession
Kotlin
class PlaybackService : MediaLibraryService() { var mediaLibrarySession: MediaLibrarySession? = null var callback: MediaLibrarySession.Callback = object : MediaLibrarySession.Callback {...} // If desired, validate the controller before returning the media library session override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? = mediaLibrarySession // Create your player and media library session in the onCreate lifecycle event override fun onCreate() { super.onCreate() val player = ExoPlayer.Builder(this).build() mediaLibrarySession = MediaLibrarySession.Builder(this, player, callback).build() } // Remember to release the player and media library session in onDestroy override fun onDestroy() { mediaLibrarySession?.run { player.release() release() mediaLibrarySession = null } super.onDestroy() } }
Java
class PlaybackService extends MediaLibraryService { MediaLibrarySession mediaLibrarySession = null; MediaLibrarySession.Callback callback = new MediaLibrarySession.Callback() {...}; @Override public MediaLibrarySession onGetSession(MediaSession.ControllerInfo controllerInfo) { // If desired, validate the controller before returning the media library session return mediaLibrarySession; } // Create your player and media library session in the onCreate lifecycle event @Override public void onCreate() { super.onCreate(); ExoPlayer player = new ExoPlayer.Builder(this).build(); mediaLibrarySession = new MediaLibrarySession.Builder(this, player, callback).build(); } // Remember to release the player and media library session in onDestroy @Override public void onDestroy() { if (mediaLibrarySession != null) { mediaLibrarySession.getPlayer().release(); mediaLibrarySession.release(); mediaLibrarySession = null; } super.onDestroy(); } }
อย่าลืมประกาศ Service
และสิทธิ์ที่จำเป็นในไฟล์ Manifest
รวมทั้ง
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- For targetSdk 34+ -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
ใช้ MediaLibrarySession
MediaLibraryService
API คาดหวังให้ไลบรารีสื่อของคุณมีโครงสร้างใน
ต้นไม้ที่มีโหนดรากเดี่ยว และโหนดย่อยที่อาจ
เล่นได้
หรือเรียกดูเพิ่มเติมได้
MediaLibrarySession
ขยาย MediaSession
API เพื่อเพิ่ม API การเรียกดูเนื้อหา เทียบกับ
MediaSession
Callback,
การติดต่อกลับของ MediaLibrarySession
เพิ่มเมธอด เช่น
onGetLibraryRoot()
สำหรับเวลาที่ไคลเอ็นต์ขอรูทMediaItem
ของโครงสร้างเนื้อหาonGetChildren()
สำหรับเมื่อลูกค้าขอองค์ประกอบย่อยของMediaItem
ในโครงสร้างเนื้อหาonGetSearchResult()
สำหรับเวลาที่ลูกค้าขอผลการค้นหาจากโครงสร้างเนื้อหาของ คำถาม
วิธีการโทรกลับที่เกี่ยวข้องจะมี LibraryParams
ที่มีสัญญาณเพิ่มเติมเกี่ยวกับประเภทโครงสร้างเนื้อหาที่แอปไคลเอ็นต์
สนใจ