【问题标题】:MediaPlayer instance: stop behaves like a pauseMediaPlayer 实例:停止的行为类似于暂停
【发布时间】:2011-07-27 18:03:40
【问题描述】:

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

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

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

如果我在做一些愚蠢的事情,或者我所观察到的实际上是状态机是如何构建的。

TIA。

【问题讨论】:

  • 你问问题已经三年了,我的疑惑也是一样。 . .我只是想检查一下天气,他们已经更新了 api,以便在停止后从启动开始?
  • @user3726986 请在“接受”答案的线程中查看我的 cmets。那是在 2011 年。它应该仍然有效。

标签: android media-player


【解决方案1】:

不是状态图http://developer.android.com/reference/android/media/MediaPlayer.html 停止表示“保持停止状态”的状态?

调用 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()

【讨论】:

  • 问题是当您从停止状态进入准备状态然后调用 start() 时,我们希望歌曲从头开始还是从播放器停止的点开始。我觉得它应该从头开始,但我观察到它是从它停止的地方开始的。所以,这让我觉得 stop() 和 pause() 之间没有区别。如果我错了,请纠正我。
  • 这是我期望它的行为方式,但是...看看stop 不会让它转到另一个位置(没有什么说它会去)。 getCurrentPosition() 即使在停止状态下也可以工作。
  • hhmm... 我希望 getCurrentPosition() 在停止状态下返回 0。那么,pause() 之间有什么区别?并停止()?为什么有两个状态本质上以相同的方式运行。同意您不需要在 pause() 之后调用 prepare()。但从用户的角度来看,这两种状态没有区别。谢谢 woliveirajr。
  • 谢谢。现在,我将通过 seekTo() 手动重置位置:因此,顺序将是 stop()-->prepare()-->seekTo(0),这将适合我的需要:)
  • 嗨!我也尝试了这个序列并且它有效,但是当我再次单击播放时,我在它寻找到 0 位置之前听到了一点音乐......这是为什么?
【解决方案2】:

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

public void start()

开始或恢复播放。如果之前已暂停播放, 播放将从暂停的地方继续。如果播放已 停止,或从未开始,播放将在 开始。

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

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多