暂停后MediaPlayer完成

时间:2011-05-29 01:56:22

标签: android mp3 media-player

我最近观察到MediaPlayer播放mp3文件时出现了一个非常奇怪的问题。我正在运行此代码(mPlayer是一个MediaPlayer):

Log.d(TAG, "Pausing");
try {
    mPlayer.pause();
    Log.d(TAG, "Paused");
} catch (IllegalStateException e) {
    Log.w(TAG, "exception pausing player");
}

奇怪的是,如果我接近音频文件的末尾,播放器会在上述代码完成后的短时间内向我的OnCompletionListener发送完成通知。 (我还没有准确确定我有多接近,但它大约为1/4秒。)例如,这是典型的logcat输出:

05-27 17:23:43.439: DEBUG/Player(266): Pausing
05-27 17:23:43.487: DEBUG/Player(266): Paused
05-27 17:23:43.838: WARN/Player(266): Audio completed (state=PAUSED)

请注意,警告行(从我的OnCompletionListener记录)在调用pause()后返回超过300毫秒!

结果是媒体播放器在我不期望的时候进入PlaybackCompleted状态。这搞砸了我的代码行为(以及start(),它从头开始重新启动,而不是播放文件的最后一点)。

这种情况发生在从1.6到2.3的仿真器上以及至少一个运行2.2的设备上。有谁知道这个问题以及如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

媒体播放器在一个单独的线程中运行,你必须等到ui线程和媒体播放器的线程同步。所以延迟是正常的。由于你的暂停命令太晚到达玩家,玩家可能真的完成了该文件。尝试使用更长的音频文件。

可能出现的另一个问题是在pause-command之后搜索超出轨道末尾的其他代码。听众的代码是什么?

相关问题