मीडिया ऐप्लिकेशन में अक्सर मीडिया आइटम के कलेक्शन होते हैं, जिन्हें हैरारकी के हिसाब से व्यवस्थित किया जाता है. उदाहरण के लिए, किसी एल्बम में मौजूद गाने या प्लेलिस्ट में मौजूद टीवी शो के एपिसोड. मीडिया आइटम के इस क्रम को मीडिया लाइब्रेरी कहा जाता है.
MediaLibraryService
, आपकी मीडिया लाइब्रेरी को दिखाने और ऐक्सेस करने के लिए, स्टैंडर्ड एपीआई उपलब्ध कराता है. उदाहरण के लिए, अपने मीडिया ऐप्लिकेशन में Android Auto के साथ काम करने की सुविधा जोड़ते समय, यह जानकारी मददगार हो सकती है. यह सुविधा, आपकी मीडिया लाइब्रेरी के लिए ड्राइवर के हिसाब से यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराती है.
MediaLibraryService
बनाना
MediaLibraryService
लागू करना, MediaSessionService
लागू करने जैसा ही है. हालांकि, onGetSession()
तरीके में आपको MediaSession
के बजाय MediaLibrarySession
दिखाना चाहिए.
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
ऑब्जेक्ट शामिल होगा. इसमें, उस कॉन्टेंट ट्री के बारे में अतिरिक्त सिग्नल होंगे जिसमें क्लाइंट ऐप्लिकेशन की दिलचस्पी है.