メディアプレーヤー(オーディオのみ)を作成、再生、処理するサービスがありますが、メインアクティビティにシークバーがあり、当然、オーディオファイルの進行状況を表示して、ユーザーがさまざまな位置をシークできるようにします。
私が理解しているのは、UIのシークバーをサービスのメディアプレーヤーに接続するための最良または適切な方法は何でしょうか。
メディアプレーヤー(オーディオのみ)を作成、再生、処理するサービスがありますが、メインアクティビティにシークバーがあり、当然、オーディオファイルの進行状況を表示して、ユーザーがさまざまな位置をシークできるようにします。
私が理解しているのは、UIのシークバーをサービスのメディアプレーヤーに接続するための最良または適切な方法は何でしょうか。
これを行う方法は次のとおりです。
オーディオを再生するサービスにバインドします。サーバーが返すインターフェイスには、関数onBindが必要です。getCurrentPos()getDuration()
アクティビティのonCreateサービスへのバインドで
onResumeuseHandlerのpostDelayed関数で更新を開始します。onPause を介して投稿されたすべてのコールバックを停止しますpostDelayed。postDelayedrunboundService.getCurrentPos()に渡され、シークバーを適切に更新します。boundService.getDuration()要約すると、定期的な更新にはサービス バインディングとハンドラーを使用する必要があります。
Handlerについては、次の質問をお読みください:時間遅延のあるタスクを繰り返しますか?SquareからOttoを試すこともできます
クラスを作成し、SeekBarSyncEvent.java必要なパラメータをそこに入れるだけです。
次に、サービスのメソッドでSeekBarSyncEventクラスを使用してバスからイベントをポストすることにより、アクティビティからシークバーを初期化できます。onPrepared()
最後@Subscribeに、アクティビティにメソッドを作成して、メソッドを呼び出すようにしますseekBarUpdate()。
これはうまく機能し、素晴らしく、保守が簡単です。
MediaControllerを調べて、役に立つかどうかを確認してください。