Aplikasi media sering kali berisi kumpulan item media, yang disusun dalam sebuah hierarki. Misalnya, lagu dalam album atau episode TV di playlist. Hierarki ini item media dikenal sebagai pustaka media.
MediaLibraryService
menyediakan API standar untuk menyalurkan dan mengakses
{i>media library<i}. Ini dapat berguna, misalnya, saat menambahkan dukungan untuk
Android Auto ke aplikasi media Anda, yang menyediakan
UI yang aman bagi pengemudi untuk koleksi media Anda.
Membuat MediaLibraryService
Mengimplementasikan MediaLibraryService
mirip dengan
mengimplementasikan MediaSessionService
,
tetapi dalam metode onGetSession()
, Anda seharusnya
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 mendeklarasikan Service
dan izin yang diperlukan dalam file manifes
juga:
<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" />
Gunakan MediaLibrarySession
MediaLibraryService
API mengharapkan library media Anda terstruktur dalam
format pohon, dengan satu simpul {i>
root<i} dan simpul turunan yang mungkin
dapat dimainkan
atau yang lebih dapat dijelajahi.
MediaLibrarySession
memperluas API MediaSession
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
dalam hierarki kontenonGetSearchResult()
ketika klien meminta hasil penelusuran dari hierarki konten untuk kueri
Metode callback yang relevan akan menyertakan LibraryParams
objek dengan sinyal tambahan tentang jenis hierarki konten yang diterima oleh aplikasi klien
yang Anda minati.