แอปสื่อมักประกอบด้วยคอลเล็กชันรายการสื่อที่จัดเป็นลำดับชั้น เช่น เพลงในอัลบั้มหรือตอนของรายการทีวีในเพลย์ลิสต์ ลำดับชั้นของรายการสื่อนี้เรียกว่าคลังสื่อ
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
Callback
จะเพิ่มเมธอด เช่น
onGetLibraryRoot()
สำหรับเวลาที่ไคลเอ็นต์ขอรูทMediaItem
ของโครงสร้างเนื้อหาonGetChildren()
สำหรับกรณีที่ไคลเอ็นต์ขอรายการย่อยของMediaItem
ในโครงสร้างเนื้อหาonGetSearchResult()
สำหรับกรณีที่ไคลเอ็นต์ขอผลการค้นหาจากต้นไม้เนื้อหาสำหรับข้อความค้นหาหนึ่งๆ
เมธอดการเรียกกลับที่เกี่ยวข้องจะมีออบเจ็กต์ LibraryParams
ที่มีสัญญาณเพิ่มเติมเกี่ยวกับประเภทของโครงสร้างเนื้อหาที่แอปไคลเอ็นต์สนใจ