MediaPlayer实例:stop表现得像一个暂停

VJ *_*ons 5 android media-player

我写了一个小音乐播放控制测试应用程序.我有一个播放,暂停,停止和倒带按钮.我的问题是那个player.stop(); 表现与player.pause()相同; 我在player.stop()之后调用player.prepare(),以便我可以让玩家实例准备好start()操作.

在执行stop()之后调用prepare()时,我没有看到任何错误[IOexceptions或IllegalStateExceptions].另外,我在stop()之后没有调用任何seekTo(0).所以,我没有将位置设置回歌曲的开头.

我正在使用运行2.3.4的Nexus Google One手机.

任何想法,如果我做一些愚蠢的事情,或者我正在观察的是实际上是如何构建状态机的.

TIA.

wol*_*ajr 3

状态图http://developer.android.com/reference/android/media/MediaPlayer.html不是 指出 stop 意味着“保持停止状态”吗?

调用 stop() 会停止播放并导致处于 Started、Paused、Prepared 或 PlaybackCompleted 状态的 MediaPlayer 进入 Stopped 状态。

一旦处于 Stopped 状态,就无法开始播放,直到调用prepare() 或prepareAsync() 将MediaPlayer 对象再次设置为Prepared 状态。调用 stop() 对已处于 Stopped 状态的 MediaPlayer 对象没有任何影响。

没有任何肯定stop()可以改变CurrentPosition.

没有肯定调用prepare()应该改变CurrentPosition

因此,要转到音乐的开头,您应该手动设置其位置。

但我同意你的观点。由于该方法声明它将从当前位置恢复播放,因此我希望它在调用pause()时回到开头。stop()

当你需要调用时它会产生一些影响prepare()

例如,对prepare()的调用可能需要很长时间才能执行,因为它可能涉及获取和解码媒体数据。

所以stop()需要调用prepare()这可能会花费更长的时间,同时pause()影响较小:您可以start()在之后调用。