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