5

メディアプレーヤー(オーディオのみ)を作成、再生、処理するサービスがありますが、メインアクティビティにシークバーがあり、当然、オーディオファイルの進行状況を表示して、ユーザーがさまざまな位置をシークできるようにします。

私が理解しているのは、UIのシークバーをサービスのメディアプレーヤーに接続するための最良または適切な方法は何でしょうか。

4

3 に答える 3

4

これを行う方法は次のとおりです。

  1. オーディオを再生するサービスにバインドします。サーバーが返すインターフェイスには、関数onBindが必要です。getCurrentPos()getDuration()

  2. アクティビティのonCreateサービスへのバインドで

  3. Activity のonResumeuseHandlerpostDelayed関数で更新を開始します。
  4. アクティビティで、関数onPause を介して投稿されたすべてのコールバックを停止しますpostDelayed
  5. runnable でpostDelayedrunboundService.getCurrentPos()に渡され、シークバーを適切に更新します。boundService.getDuration()

要約すると、定期的な更新にはサービス バインディングとハンドラーを使用する必要があります。

  1. バインドされたサービスについては、「バインドされたサービス」のドキュメントを参照してください (シナリオでは、ローカルのバインドされたサービスで十分です)。
  2. 定期的な更新を使用する方法Handlerについては、次の質問をお読みください:時間遅延のあるタスクを繰り返しますか?
于 2011-06-06T18:05:11.050 に答える
0

SquareからOttoを試すこともできます

クラスを作成し、SeekBarSyncEvent.java必要なパラメータをそこに入れるだけです。

  • 進行状況
  • 持続時間
  • ブール値 fromUser
  • あなたに必要なものは何でも

次に、サービスのメソッドでSeekBarSyncEventクラスを使用してバスからイベントをポストすることにより、アクティビティからシークバーを初期化できます。onPrepared()

最後@Subscribeに、アクティビティにメソッドを作成して、メソッドを呼び出すようにしますseekBarUpdate()

これはうまく機能し、素晴らしく、保守が簡単です。

于 2013-12-20T10:14:28.597 に答える
0

MediaControllerを調べて、役に立つかどうかを確認してください。

于 2011-06-06T18:04:36.267 に答える