【问题标题】:MediaPlayer.SeekTo(int) throws IllegalStateExceptionMediaPlayer.SeekTo(int) 抛出 IllegalStateException
【发布时间】:2012-10-21 10:33:49
【问题描述】:

有时我会收到 MediaPlayer.SeekTo(int) 抛出的 IllegalStateException MediaPlayer 在 Service 中运行,并像这样调用 SeekTo(int):

public void seekTo(int value)
{
if (mp != null && !(value <= -1)) {
mp.seekTo(value);
}
}

【问题讨论】:

  • 首先你为什么要使用!(value &lt;= -1)?这与(value &gt;= 0) 基本相同 - 抱歉,这似乎是一种非常奇怪的做事方式。其次,您是否检查过MediaPlayerseekTo(...) 方法的文档?如果它处于空闲、初始化、停止或错误状态,它将抛出异常。 developer.android.com/reference/android/media/…

标签: android service media-player illegalstateexception


【解决方案1】:

IllegalStateException 被抛出以防止编程错误,例如调用prepare()prepareAsync() 或处于无效状态的重载setDataSource 方法之一。

如果在任何其他状态下调用 prepare()prepareAsync(),则会抛出 IllegalStateException

虽然异步seekTo(int) 调用以正确的方式返回,但实际的查找操作可能需要一段时间才能完成,尤其是对于正在流式传输的音频/视频。当实际的查找操作完成时,如果事先通过setOnSeekCompleteListener(OnSeekCompleteListener) 注册了OnSeekCompleteListener,则内部播放器引擎会调用用户提供的OnSeekComplete.onSeekComplete()。 请注意seekTo(int)也可以在其他状态下调用,例如PreparedPausedPlaybackCompleted状态。

这些数据都在这里:http://developer.android.com/reference/android/media/MediaPlayer.html 其实我是直接引用的。

您应该能够使用OnErrorListener() 处理遇到的任何错误。

您可以在此处找到有关OnErrorListener() 的更多信息:

http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html

在错误监听器中,您将:

  1. 收到错误消息。
  2. 确定错误类型。
  3. 处理错误以纠正情况而不会崩溃。

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    相关资源
    最近更新 更多