私は現在、ビデオとオーディオ機能を備えたアプリの一部に取り組んでおり、最近コードベースのリファクタリングを開始しました。目標は、統合MediaSession/ MediaController
とMediaBrowserService/ MediaBrowser
フレームワークです。
より具体的には、ビデオ コンポーネントとオーディオ コンポーネントの両方にPlayerViewを使用ExoPlayer
します。これには、次のプレーヤー インスタンスへの参照が必要です。PlayerControlView
PlayerControlView
/**
* 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などのさまざまなコールバックを使用してみましたが、SimpleExoPlayerもPlayerControlViewも Parcelable ではありません。
従来のサービスでは、 を使用Binder
してサービス内で宣言したメソッドにアクセスし、次のようなことを行います。
boolean attachPlayerControlView(PlayerControlView playerControlView) {
if (player != null) {
playerControlView.setPlayer(player);
return true;
}
return false;
}
ただし、これはMediaBrowserService/ MediaBrowser
フレームワークでは不可能のようです。この質問への回答を確認しました。これは、[sendCommand] を使用してカスタム メソッドを呼び出す方法であることを示しています。ただし、パラメーターが Parcelable である必要もあります。
要約すると、私の質問は、フレームワークの下でPlayerControlView
インスタンスにアクセスするSimpleExoPlayer
方法、またはその逆の方法があるかどうかMediaBrowserService
です。
回答やコメントをお寄せいただきありがとうございます。