メディアアプリに接続する

メディア コントローラは、メディア セッションとやり取りしてメディアのクエリと制御を行います 発生します。Media3 の MediaController API は Player インターフェースを実装します。メディアを使用するクライアント アプリの例 コントローラには以下が含まれます。

メディア コントローラは、メディアアプリ内でも便利です。たとえば、 プレーヤーとメディア セッションが、Activity とは別の Service に存在するか、 UI を使った Fragment

MediaController を作成する

MediaController を作成するには、まずSessionToken 対応する MediaSessionActivityonStart() メソッドまたは Fragment が適しています。

Kotlin

val sessionToken = 
  SessionToken(context, ComponentName(context, PlaybackService::class.java))

Java

SessionToken sessionToken = 
  new SessionToken(context, new ComponentName(context, PlaybackService.class));

この SessionToken を使用して MediaController をビルドすると、 特定のセッションに追加します。この処理は非同期で行われるため、必要な 結果をリッスンし 可能な場合はそれを使用します

Kotlin

val controllerFuture =
  MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
  // MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())

Java

ListenableFuture<MediaController> controllerFuture =
  new MediaController.Builder(context, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
  // MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor());

MediaController を使用する

MediaControllerPlayer インターフェースを実装しているため、コマンドを使用できます。 接続された MediaSession の再生を制御するためにインターフェースに定義されています。 つまり、MediaControllerplay() を呼び出すと、 コマンドが接続された MediaSession に送信されるため、 その基盤となる Player に追加します。

同様に、コントローラに Player.Listener を追加して、 Player 状態の変化を示します。詳しくは、 プレーヤー イベントのガイド Player.Listener の使用に関する詳細をご覧ください。MediaController.Listener インターフェースは、イベントと受信コマンドに対する 接続先MediaSession: onAvailableSessionCommandsChanged() 使用可能なセッション コマンドがメディア セッションによって変更され、 onDisconnected() コントローラがセッションから切断された時点。

他のコンポーネントと同様に、MediaController が成功した場合は必ず解放してください。 不要になったり(ActivityonStop() メソッドや、 Fragment

Kotlin

MediaController.releaseFuture(controllerFuture)

Java

MediaController.releaseFuture(controllerFuture);

コントローラを離しても、API キーに送信されたすべての保留中のコマンドが これらのコマンドの実行後にのみ、セッション サービスからバインド解除されます。 タイムアウト時間が経過したかを判断する必要があります。

MediaBrowser を作成して使用する

MediaBrowser は、 MediaController: メディアが提供するメディア ライブラリのブラウジングも有効にします。 アプリの MediaLibraryService

Kotlin

val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
  // MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())

Java

ListenableFuture<MediaBrowser> browserFuture =
  new MediaBrowser.Builder(context, sessionToken).buildAsync();
browserFuture.addListener(() -> {
  // MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor());

メディアアプリのコンテンツ ライブラリのブラウジングを開始するには、まずルートノードを取得します getLibraryRoot() の場合:

Kotlin

// Get the library root to start browsing the library tree.
val rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null)
rootFuture.addListener({
  // Root node MediaItem is available here with rootFuture.get().value
}, MoreExecutors.directExecutor())

Java

// Get the library root to start browsing the library tree.
ListenableFuture<LibraryResult<MediaItem>> rootFuture =
  mediaBrowser.getLibraryRoot(/* params= */ null);
rootFuture.addListener(() -> {
  // Root node MediaItem is available here with rootFuture.get().value
}, MoreExecutors.directExecutor());

次に、メディア ライブラリ内を移動するために、 ライブラリ内の getChildren()MediaItem。たとえば、 ルートノード MediaItem の子ノード:

Kotlin

// Get the library root to start browsing the library tree.
val childrenFuture = 
  mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Int.MAX_VALUE, null)
childrenFuture.addListener({
  // List of children MediaItem nodes is available here with
  // childrenFuture.get().value
}, MoreExecutors.directExecutor())

Java

ListenableFuture<LibraryResult<ImmutableList<MediaItem>>> childrenFuture =
  mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Integer.MAX_VALUE, null);
childrenFuture.addListener(() -> {
  // List of children MediaItem nodes is available here with
  // childrenFuture.get().value
}, MoreExecutors.directExecutor());