אפליקציות מדיה מכילות לעיתים קרובות אוספים של פריטי מדיה שמסודרים בהיררכיה. לדוגמה, שירים באלבום או פרקים של תוכניות טלוויזיה בפלייליסט. ההיררכיה הזו של פריטי מדיה נקראים ספריית מדיה.
MediaLibraryService
מספק API סטנדרטי להצגת מודעות ולגישה
ספריית המדיה. האפשרות הזו יכולה להועיל, לדוגמה, כשאנחנו מוסיפים תמיכה
את 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
ה-API של MediaLibraryService
מצפה שספריית המדיה שלך תהיה בנויה
בפורמט של עץ, עם צומת בסיס אחד וצומתי צאצא שעשויים להיות
משחקייה
או פתוח לעיון.
MediaLibrarySession
מרחיב את ממשק ה-API של MediaSession
כדי להוסיף ממשקי API לגלישה בתוכן. בהשוואה ל-
MediaSession
התקשרות חזרה,
הקריאה החוזרת MediaLibrarySession
מוסיפה שיטות כמו:
onGetLibraryRoot()
למקרים שבהם לקוח מבקש את הרמה הבסיסית (root)MediaItem
של עץ תוכןonGetChildren()
למקרים שבהם לקוח מבקש מהצאצאים שלMediaItem
בעץ התוכןonGetSearchResult()
למקרים שבהם לקוח מבקש תוצאות חיפוש מעץ התוכן שאילתה
שיטות רלוונטיות להתקשרות חזרה יכללו LibraryParams
אובייקט עם אותות נוספים לגבי סוג עץ התוכן שאפליקציית לקוח
שבו הוא מתעניין.