MediaLibraryService के साथ कॉन्टेंट दिखाएं

मीडिया ऐप्लिकेशन में अक्सर मीडिया आइटम के कलेक्शन होते हैं, जिन्हें हैरारकी के हिसाब से व्यवस्थित किया जाता है. उदाहरण के लिए, किसी एल्बम में मौजूद गाने या प्लेलिस्ट में मौजूद टीवी शो के एपिसोड. मीडिया आइटम के इस क्रम को मीडिया लाइब्रेरी कहा जाता है.

हैरारकी में व्यवस्थित किए गए मीडिया कॉन्टेंट के उदाहरण
पहली इमेज: मीडिया लाइब्रेरी बनाने वाले मीडिया आइटम की हैरारकी के उदाहरण.

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 ऑब्जेक्ट शामिल होगा. इसमें, उस कॉन्टेंट ट्री के बारे में अतिरिक्त सिग्नल होंगे जिसमें क्लाइंट ऐप्लिकेशन की दिलचस्पी है.