Wyświetlanie treści przy użyciu usługi MediaLibraryService

Aplikacje do multimediów często zawierają kolekcje elementów multimedialnych uporządkowane według hierarchii. Na przykład utwory z albumu lub odcinki programów telewizyjnych na playliście. Ta hierarchia Elementy multimedialne to biblioteka multimediów.

Przykłady treści multimedialnych uporządkowanych w hierarchii
Rysunek 1. Przykłady hierarchii elementów multimedialnych, które tworzą biblioteki multimediów.

MediaLibraryService udostępnia ustandaryzowany interfejs API do obsługi i uzyskiwania dostępu do biblioteki multimediów. Może to być pomocne na przykład przy dodawaniu obsługi Android Auto do aplikacji do multimediów, która udostępnia własną bezpieczne dla sterownika do biblioteki multimediów.

Utwórz MediaLibraryService

Implementacja MediaLibraryService przebiega podobnie do zaimplementowanie MediaSessionService, poza tym w metodzie onGetSession() należy zwraca MediaLibrarySession zamiast 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();
  }
}

Pamiętaj, aby zadeklarować Service i wymagane uprawnienia w pliku manifestu. oraz:

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

Użyj formy płatności MediaLibrarySession

Interfejs API MediaLibraryService oczekuje, że biblioteka multimediów będzie uporządkowana z jednym węzłem głównym i węzłami podrzędnymi, które mogą z możliwością gry lub dodatkowo można je przeglądać.

MediaLibrarySession Rozszerza interfejs API MediaSession o interfejsy API przeglądania treści. W porównaniu z MediaSession oddzwonienie, MediaLibrarySession oddzwonienie dodaje metody, takie jak:

  • onGetLibraryRoot() gdy klient żąda głównego elementu MediaItem drzewa treści
  • onGetChildren() dla sytuacji, gdy klient żąda elementów podrzędnych MediaItem w drzewie treści
  • onGetSearchResult() w przypadku, gdy klient zażąda wyników wyszukiwania z drzewa treści dla danego zapytanie

Odpowiednie metody wywołania zwrotnego obejmują LibraryParams obiekt z dodatkowymi sygnałami dotyczącymi typu drzewa treści, które aplikacja kliencka w Twojej okolicy.