2011-07-27 66 views
5

我写了一个小型音乐播放控制测试应用程序。我有一个戏剧,暂停,停止和倒带按钮。我的问题是, player.stop(); 的行为与 player.pause()相同; 我在player.stop()之后调用player.prepare(),以便我可以让播放器实例准备好start()操作。MediaPlayer实例:停止行为像暂停

我在执行stop()之后调用prepare()时未看到任何错误[IOexceptions或IllegalStateExceptions]。另外,我不会在stop()之后调用任何seekTo(0)。所以,我并没有把这个位置放回到歌曲的开头。

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

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

TIA。

+0

自你问了三年以来,我的疑问也一样。 。 。我只是想检查他们更新api的天气,以便在停止后开始启动? – user3726986

+0

@ user3726986请在具有“已接受”答案的线索中查看我的评论。那是在2011年。它应该仍然有效。 –

回答

2

不是状态图http://developer.android.com/reference/android/media/MediaPlayer.html 表示停止意味着“停留在停止状态”?

调用stop()将停止播放并使MediaPlayer处于已启动,暂停,准备或播放完成状态以进入停止状态。

一旦进入停止状态,直到调用prepare()或prepareAsync()以再次将MediaPlayer对象设置为Prepared状态时才能开始播放。 调用stop()对已处于停止状态的MediaPlayer对象没有影响。

有没有确认stop()应该改变CurrentPosition

有没有确认拨打prepare()应该改变CurrentPosition

因此,要开始音乐,你应该mannualy设置其位置。

但我同意你的看法。由于pause()方法声明它将从当前位置继续播放,因此我希望它在调用stop()时回到起点。

而且它有一定的影响,当你需要调用prepare()

例如,呼叫准备()可能需要很长的时间来执行,因为它可能涉及到取和解码媒体数据。

所以stop()需要调用prepare(),可以使需要较长的时间,而pause()具有影响较小:您可以后立即致电start()

+0

问题是,当你从停止状态转到预备状态,然后调用start()时,我们是否希望歌曲从开始或从播放器停止的位置开始。我觉得它应该从一开始就开始,但我正在观察它是从停止点开始的。所以,这让我觉得stop()和pause()之间没有区别。纠正我,如果我错了。 –

+0

这是我期望它的行为,但是......看看“停止”不会让它进入另一个位置(没有什么会说它会去的)。即使在停止状态下,getCurrentPosition()也可以工作。 – woliveirajr

+0

hhmm ...我期望getCurrentPosition()在停止状态返回0.所以,pause()之间的区别是什么?并停止()?为什么有两个国家基本上功能相同的方式。同意暂停()后你不需要调用prepare()。但从用户的角度来看,这两种状态没有区别。谢谢woliveirajr。 –

3

我认为这可能是一个错误,因为对于MediaPlayer的启动方法的API文档建议您所期望的行为:

公共无效的start()

开始或继续播放。如果播放先前已暂停,则 将从暂停播放的位置继续播放。如果播放已停止,或从未开始播放,播放将从 开始。

目前,一旦玩家准备好显式调用seekTo(0)似乎是一个合理的解决方法。