我最近觀察到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的設備上。有誰知道這個問題,怎麽辦呢?