【发布时间】:2011-05-29 01:56:21
【问题描述】:
我最近发现 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 的设备上都发生过这种情况。有谁知道这个问题以及如何解决?
【问题讨论】:
标签: android mp3 media-player