غالبًا ما تحتوي تطبيقات الوسائط على مجموعات من عناصر الوسائط التي يتم تنظيمها في تسلسل هرمي. على سبيل المثال، الأغاني من ألبوم أو حلقات تلفزيونية في قائمة تشغيل يُعرف هذا التسلسل الهرمي لعناصر الوسائط باسم مكتبة الوسائط.
توفّر 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
مع إشارات إضافية حول نوع شجرة المحتوى الذي يهتم به تطبيق العميل.