9

私は現在、ビデオとオーディオ機能を備えたアプリの一部に取り組んでおり、最近コードベースのリファクタリングを開始しました。目標は、統合MediaSession/ MediaControllerMediaBrowserService/ MediaBrowserフレームワークです。

より具体的には、ビデオ コンポーネントとオーディオ コンポーネントの両方にPlayerViewを使用ExoPlayerします。これには、次のプレーヤー インスタンスへの参照が必要です。PlayerControlViewPlayerControlView

/**
   * Sets the {@link Player} to control.
   *
   * @param player The {@link Player} to control, or {@code null} to detach the current player. Only
   *     players which are accessed on the main thread are supported ({@code
   *     player.getApplicationLooper() == Looper.getMainLooper()}).
   */
  public void setPlayer(@Nullable Player player) {...

ただし、Android 開発者の投稿と のドキュメントMediaBrowserServiceは、プレーヤー インスタンスはサービスに含まれている必要があります。さらに、クライアント サイト (MediaBrowser および MediaController) がconnect()メソッドとMediaBrowserConnectionCallbackを介して対話してサービスを提供する唯一の方法です。これにより、プレーヤーのインスタンスを PlayerControlView に渡す (またはその逆) ことができなくなります。

MediaSessionCompat.Callbackなどのさまざまなコールバックを使用してみましたが、SimpleExoPlayerPlayerControlViewも Parcelable ではありません。

従来のサービスでは、 を使用Binderしてサービス内で宣言したメソッドにアクセスし、次のようなことを行います。

boolean attachPlayerControlView(PlayerControlView playerControlView) {
            if (player != null) {
                playerControlView.setPlayer(player);
                return true;
            }
            return false;
        }

ただし、これはMediaBrowserService/ MediaBrowserフレームワークでは不可能のようです。この質問への回答を確認しました。これは、[sendCommand] を使用してカスタム メソッドを呼び出す方法であることを示しています。ただし、パラメーターが Parcelable である必要もあります。

要約すると、私の質問は、フレームワークの下でPlayerControlViewインスタンスにアクセスするSimpleExoPlayer方法、またはその逆の方法があるかどうかMediaBrowserServiceです。

回答やコメントをお寄せいただきありがとうございます。

4

1 に答える 1