غالبًا ما تحتوي تطبيقات الوسائط على مجموعات من عناصر الوسائط يتم تنظيمها في تسلسل هرمي. على سبيل المثال، أغانٍ من ألبوم أو حلقات تلفزيونية في قائمة تشغيل. يأتي هذا التسلسل الهرمي وعناصر الوسائط تُعرف باسم مكتبة الوسائط.
توفّر MediaLibraryService
واجهة برمجة تطبيقات موحّدة لعرض بياناتك والوصول إليها
ومكتبة الوسائط. يمكن أن يكون هذا مفيدًا، على سبيل المثال، عند إضافة دعم لـ
Android Auto لتطبيق الوسائط الذي يوفّر
واجهة مستخدم آمنة للسائق لمكتبة الوسائط.
إنشاء MediaLibraryService
يتشابه تنفيذ MediaLibraryService
مع
تنفيذ MediaSessionService
،
باستثناء أنه في طريقة onGetSession()
، يجب عليك
عرض MediaLibrarySession
بدلاً من 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(); } }
يجب الإفصاح عن 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
أن يتم تنظيم مكتبة الوسائط في
تنسيق الشجرة، ويحتوي على عقدة جذر واحدة وعُقد فرعية قد تكون
هيّا نلعب
قابلة للتصفّح أو أكثر
MediaLibrarySession
توسيع واجهة برمجة تطبيقات MediaSession
لإضافة واجهات برمجة تطبيقات لتصفّح المحتوى. بالمقارنة مع
MediaSession
معاودة الاتصال،
معاودة الاتصال MediaLibrarySession
تضيف طرق مثل:
onGetLibraryRoot()
عندما يطلب العميل الجذرMediaItem
من شجرة محتوىonGetChildren()
عندما يطلب العميل العناصر الثانوية لـMediaItem
في شجرة المحتوىonGetSearchResult()
عندما يطلب عميل نتائج بحث من شجرة المحتوى لمحتوى طلب
وستتضمّن طرق معاودة الاتصال ذات الصلة السمة LibraryParams
.
يحتوي على إشارات إضافية حول نوع شجرة المحتوى الذي يستخدم تطبيق عميل
المعنية.