Menayangkan konten dengan MediaLibraryService

Aplikasi media sering kali berisi kumpulan item media, yang disusun dalam sebuah hierarki. Misalnya, lagu dalam album atau episode TV di playlist. Hierarki ini item media dikenal sebagai pustaka media.

Contoh konten media yang disusun dalam hierarki
Gambar 1: Contoh hierarki item media yang membentuk koleksi media.

MediaLibraryService menyediakan API standar untuk menyalurkan dan mengakses {i>media library<i}. Ini dapat berguna, misalnya, saat menambahkan dukungan untuk Android Auto ke aplikasi media Anda, yang menyediakan UI yang aman bagi pengemudi untuk koleksi media Anda.

Membuat MediaLibraryService

Mengimplementasikan MediaLibraryService mirip dengan mengimplementasikan MediaSessionService, tetapi dalam metode onGetSession(), Anda seharusnya menampilkan MediaLibrarySession, bukan 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();
  }
}

Jangan lupa mendeklarasikan Service dan izin yang diperlukan dalam file manifes juga:

<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" />

Gunakan MediaLibrarySession

MediaLibraryService API mengharapkan library media Anda terstruktur dalam format pohon, dengan satu simpul {i> root<i} dan simpul turunan yang mungkin dapat dimainkan atau yang lebih dapat dijelajahi.

MediaLibrarySession memperluas API MediaSession untuk menambahkan API penjelajahan konten. Dibandingkan dengan Callback MediaSession, callback MediaLibrarySession menambahkan metode seperti:

Metode callback yang relevan akan menyertakan LibraryParams objek dengan sinyal tambahan tentang jenis hierarki konten yang diterima oleh aplikasi klien yang Anda minati.