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