برنامه های رسانه اغلب حاوی مجموعه ای از آیتم های رسانه ای هستند که در یک سلسله مراتب سازماندهی شده اند. به عنوان مثال، آهنگ های یک آلبوم یا قسمت های تلویزیونی در یک لیست پخش. این سلسله مراتب از آیتم های رسانه ای به عنوان کتابخانه رسانه ای شناخته می شود.
MediaLibraryService
یک API استاندارد برای سرویس دهی و دسترسی به کتابخانه رسانه شما فراهم می کند. این می تواند مفید باشد، به عنوان مثال، هنگام افزودن پشتیبانی از Android Auto به برنامه رسانه خود، که رابط کاربری امن برای درایور خود را برای کتابخانه رسانه شما فراهم می کند.
یک MediaLibraryService
بسازید
پیاده سازی MediaLibraryService
شبیه اجرای MediaSessionService
است، با این تفاوت که در متد onGetSession()
باید به جای MediaSession
یک MediaLibrarySession
برگردانید.
کاتلین
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() } }
جاوا
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
و مجوزهای مورد نیاز خود را در فایل مانیفست نیز اعلام کنید:
<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
استفاده کنید
MediaLibraryService
API انتظار دارد که کتابخانه رسانه شما در قالب درختی، با یک گره ریشه واحد و گرههای فرزند که ممکن است قابل پخش یا مرور بیشتر باشند، ساخته شود.
MediaLibrarySession
API MediaSession
را برای افزودن APIهای مرور محتوا گسترش می دهد. در مقایسه با فراخوان MediaSession
، MediaLibrarySession
متدهایی مانند:
-
onGetLibraryRoot()
برای زمانی که یک کلاینت،MediaItem
ریشه درخت محتوا را درخواست می کند -
onGetChildren()
برای زمانی که مشتری از فرزندان یکMediaItem
در درخت محتوا درخواست می کند -
onGetSearchResult()
برای زمانی که یک کلاینت نتایج جستجو را از درخت محتوا برای یک پرس و جو داده شده درخواست می کند.
روشهای برگشت تماس مربوطه شامل یک شی LibraryParams
با سیگنالهای اضافی در مورد نوع درخت محتوایی است که برنامه مشتری به آن علاقه دارد.