Aplikasi media sering kali berisi kumpulan item media, yang disusun dalam hierarki. Misalnya, lagu dalam album atau episode TV dalam playlist. Hierarki item media ini dikenal sebagai library media.
MediaLibraryService
menyediakan API terstandardisasi untuk menyalurkan dan mengakses
library media Anda. Hal ini dapat berguna, misalnya, saat menambahkan dukungan untuk
Android Auto ke aplikasi media Anda, yang menyediakan UI
yang aman bagi pengemudi untuk library media Anda.
Membuat MediaLibraryService
Mengimplementasikan MediaLibraryService
mirip dengan
mengimplementasikan MediaSessionService
,
kecuali dalam metode onGetSession()
, Anda harus
menampilkan MediaLibrarySession
, bukan 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(); } }
Jangan lupa untuk mendeklarasikan Service
dan izin yang diperlukan dalam file
manifes:
<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" />
Menggunakan MediaLibrarySession
MediaLibraryService
API mengharapkan library media Anda disusun dalam
format hierarki, dengan satu node root dan node turunan yang mungkin
dapat diputar
atau dapat dijelajahi lebih lanjut.
MediaLibrarySession
memperluas MediaSession
API untuk menambahkan API penjelajahan konten. Dibandingkan dengan callback MediaSession
, callback MediaLibrarySession
menambahkan metode seperti:
onGetLibraryRoot()
saat klien memintaMediaItem
root dari hierarki kontenonGetChildren()
saat klien meminta turunanMediaItem
di hierarki kontenonGetSearchResult()
saat klien meminta hasil penelusuran dari hierarki konten untuk kueri tertentu
Metode callback yang relevan akan menyertakan objek LibraryParams
dengan sinyal tambahan tentang jenis hierarki konten yang diminati
aplikasi klien.