2011-07-27 15 views
5

小さな音楽再生コントロールテストアプリケーションを作成しました。再生、一時停止、停止、巻き戻しボタンがあります。私の問題はそのことです。 player.stop(); は、 と同じ正確な動作をしています。player.pause(); 私はplayerインスタンスをstart()操作の準備ができるように、player.stop()の直後にplayer.prepare()を呼び出しています。MediaPlayerインスタンス:停止は一時停止のように動作します

私はstop()の後にprepare()を呼び出す際に[IOexceptions or IllegalStateExceptions]エラーが発生しません。また、私はstop()の後にseekTo(0)を呼び出していません。だから、私は歌の先頭に位置を戻していません。

2.3.4を実行しているNexus Google One端末を使用しています。

私は何か愚かなことをしているかどうか、あるいは私が観察していることが実際にどのように状態マシンが構築されているかについての考えはあります。

TIA。

+0

あなたは質問をしてから3年経ちましたが、私の疑問も同じです。 。私はちょうど彼らが開始後に始まる停止後にAPIを更新した天気をチェックしたいと思った? – user3726986

+0

@ user3726986 plsは "受け入れられた"答えを持っているスレッドで私のコメントを見ます。それは2011年に戻っています。それはまだ機能するはずです。 –

答えて

2

状態図http://developer.android.com/reference/android/media/MediaPlayer.html は「停止状態にとどまる」ことを示していますか?

stop()を呼び出すと再生が停止し、Started、Paused、PreparedまたはPlaybackCompleted状態のMediaPlayerがStopped状態になります。

停止状態になると、prepare()またはprepareAsync()が呼び出されてMediaPlayerオブジェクトがPrepared状態に再び設定されるまで再生を開始できません。 stop()の呼び出しは、既にStopped状態になっているMediaPlayerオブジェクトには影響しません。

stop()CurrentPositionを変更する必要はありません。

prepare()を呼び出すとCurrentPositionを変更する必要はありません。

音楽の始めに行くには、その位置を手動で設定する必要があります。

しかし、私はあなたに同意します。 pause()メソッドは現在の位置からの再生を再開すると述べているので、stop()が呼び出されると、最初に戻ることが期待されます。

そして、あなたは、例えばprepare()

を呼び出す必要があるときには、いくつかの影響を与え、それがフェッチとデコードメディアデータを伴う可能性があるため、()を準備するための呼び出しは、実行に時間がかかることがあります。

のでstop()pause()はあまり影響を与えながら、それは時間がかかることができますprepare()を呼び出す必要があります:あなたは右後start()を呼び出すことができます。

+0

質問は、停止状態から準備状態にしてからstart()を呼び出すと、その曲が最初から、またはプレイヤーが停止した時点から開始すると予想されます。私はそれが最初から始めるべきだと感じますが、私はそれが停止された時点から始まっているのを観察しています。ですから、stop()とpause()の間に違いはないと私は思います。私が間違っていれば私を訂正してください。 –

+0

それは私がそれがどのように行動することを期待するのかですが、「停止」はそれが別のポジションに向かないということを見てください(何も言えません)。また、getCurrentPosition()は停止状態でも機能します。 – woliveirajr

+0

hhmm ...私は停止状態のgetCurrentPosition()が0を返すと期待します。だから、pause()の違いは何ですか?とstop()?基本的に同じように機能する2つの状態を持つ理由pause()の後にprepare()を呼び出す必要はないとのことである。しかし、ユーザーの観点からは、これらの2つの状態に違いはありません。ありがとうwoliveirajr。 –

3

私はMediaPlayerの開始メソッドのAPIドキュメントは、あなたが期待する行動を示唆しているので、これは、バグかもしれないと思う:

公共ボイド開始()

開始または再生を再開します。再生が以前に一時停止されていた場合は、一時停止した場所から再生が続行されます( )。再生が 停止した場合、または以前に開始されなかった場合、再生は の先頭から開始されます。

当分の間、プレーヤーが準備されたら明示的にseekTo(0)を呼び出すことは合理的な回避策のようです。

関連する問題