MediaLibraryService ile içerik sunma

Medya uygulamaları genellikle bir hiyerarşiye göre düzenlenmiş medya öğesi koleksiyonlarını içerir. Örneğin, bir albümdeki şarkılar veya oynatma listesindeki TV bölümleri. Bu hiyerarşisi medya öğeleri, medya kitaplığı olarak bilinir.

Bir hiyerarşide düzenlenmiş medya içeriği örnekleri
Şekil 1: kullanabilirsiniz.

MediaLibraryService, sizinle çalışmak ve bunlara erişmek için standart medya kitaplığını kullanabilirsiniz. Bu, örneğin yeni bir ekip için destek eklerken Android Auto'yu medya uygulamanıza yükleyin. Bu, medya kitaplığınız için sürücü güvenli kullanıcı arayüzü.

Bir MediaLibraryService oluşturun

MediaLibraryService uygulamak, bir MediaSessionService uygulamak, Bunun dışında, onGetSession() yönteminde MediaSession yerine MediaLibrarySession döndür.

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();
  }
}

Manifest dosyasında Service ayarlarınızı ve gerekli izinleri belirtmeyi unutmayın ayrıca:

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

MediaLibrarySession kullan

MediaLibraryService API, medya kitaplığınızın ağaç biçiminde, tek bir kök düğüme ve oynanabilir veya daha fazla göz atılabilir.

MediaLibrarySession MediaSession API'yi genişleterek içerik tarama API'leri ekler. Şuna kıyasla: MediaSession geri arama, MediaLibrarySession geri arama aşağıdaki gibi yöntemler ekler:

  • onGetLibraryRoot() (müşteri içerik ağacının kök MediaItem'sini istediğinde kullanılır)
  • onGetChildren() istemci, içerik ağacındaki bir MediaItem öğesinin alt öğelerini istediğinde
  • onGetSearchResult() belirli bir sorgu için içerik ağacından arama sonuçları istediğinde sorgu

İlgili geri çağırma yöntemleri bir LibraryParams içerir istemci uygulamasının topladığı içerik ağacı türüyle ilgili ek sinyaller içeren nesne yardımcı olur.