Medya uygulamaları genellikle hiyerarşik olarak düzenlenmiş medya öğesi koleksiyonları içerir. Örneğin, bir albümdeki şarkılar veya oynatma listesindeki TV bölümleri. Medya öğelerinin bu hiyerarşisi medya kitaplığı olarak bilinir.
MediaLibraryService
, medya kitaplığınızı yayınlamak ve kitaplığınıza erişmek için standartlaştırılmış bir API sağlar. Bu, örneğin medya uygulamanıza Android Auto desteği eklerken faydalı olabilir. Bu destek, medya kitaplığınız için sürücüye güvenli kendi kullanıcı arayüzünü sağlar.
MediaLibraryService
oluşturma
MediaLibraryService
uygulamak, MediaSessionService
uygulamaya benzer. Tek fark, onGetSession()
yönteminde MediaSession
yerine MediaLibrarySession
döndürmeniz gerektiğidir.
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
ve gerekli izinlerinizi manifest dosyasında da belirtmeyi 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ın
MediaLibraryService
API, medya kitaplığınızın tek bir kök düğüm ve oynatılabilir veya gezilebilir alt düğümler içeren bir ağaç biçiminde yapılandırılmasını bekler.
MediaLibrarySession
, içeriklere göz atma API'leri eklemek için MediaSession
API'yi genişletir. MediaSession
geri çağırma yöntemine kıyasla MediaLibrarySession
geri çağırma yöntemi aşağıdakiler gibi yöntemler ekler:
onGetLibraryRoot()
Bir istemci, içerik ağacının kökünüMediaItem
istediğindeonGetChildren()
istemci, içerik ağacındaki birMediaItem
öğesinin alt öğelerini istediğindeonGetSearchResult()
Müşteri belirli bir sorgu için içerik ağacından arama sonuçları istediğinde
Alakalı geri çağırma yöntemleri, istemci uygulamasının ilgilendiği içerik ağacı türü hakkında ek sinyaller içeren bir LibraryParams
nesnesi içerir.