Medya uygulamaları genellikle bir hiyerarşide düzenlenmiş medya öğesi koleksiyonları içerir. Örneğin, albümdeki şarkılar veya şarkı listesindeki TV bölümleri. Medya öğeleri hiyerarşisine medya kitaplığı denir.
MediaLibraryService
, medya kitaplığınızı sunmak ve bunlara erişmek için standartlaştırılmış bir API sağlar. Bu, örneğin, medya uygulamanıza, medya kitaplığınız için sürücüler için güvenli bir kullanıcı arayüzü sağlayan Android Auto desteği eklerken yararlı olabilir.
MediaLibraryService
oluşturun
MediaLibraryService
uygulanması MediaSessionService
uygulamasına benzer ancak onGetSession()
yönteminde MediaSession
yerine MediaLibrarySession
döndürmeniz gerekir.
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(); } }
Manifest dosyasında da Service
ve gerekli izinleri beyan etmeyi unutmayın:
<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
kullan
MediaLibraryService
API, medya kitaplığınızın tek bir kök düğüm ve oynatılabilir ya da daha fazla göz atılabilir olabilecek alt düğümlerden oluşan bir ağaç biçiminde yapılandırılmasını bekler.
MediaLibrarySession
, MediaSession
API'yi içerik tarama API'leri ekleyecek şekilde genişletir. MediaSession
geri çağırma ile karşılaştırıldığında MediaLibrarySession
geri çağırma aşağıdaki gibi yöntemler ekler:
onGetLibraryRoot()
İstemci bir içerik ağacının kökMediaItem
kodunu istediğindeonGetChildren()
İstemci, içerik ağacındaki birMediaItem
öğesinin alt öğelerini istediğindeonGetSearchResult()
İstemci, belirli bir sorgu için içerik ağacından arama sonuçları istediğinde
İlgili geri çağırma yöntemleri, istemci uygulamasının ilgilendiği içerik ağacı türüyle ilgili ek sinyaller içeren bir LibraryParams
nesnesi içerir.