Aplikasi media sering kali berisi koleksi item media, yang diatur dalam hierarki. Misalnya, lagu dalam album atau episode TV dalam playlist. Hierarki item media ini dikenal sebagai library media.
MediaLibraryService
menyediakan API standar untuk menayangkan dan mengakses
library media Anda. Hal ini dapat berguna, misalnya, saat menambahkan dukungan untuk
Android Auto ke aplikasi media Anda, yang menyediakan
UI-nya sendiri yang aman bagi pengemudi untuk library media Anda.
Mem-build 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 juga 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 dapat
diputar
atau 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()
untuk saat klien meminta turunanMediaItem
dalam hierarki kontenonGetSearchResult()
untuk 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.