Недавно я заметил очень странную проблему с 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
) приходит через 300 мс после возврата вызова pause()
!
В результате медиаплеер переходит в состояние PlaybackCompleted, когда я этого не ожидаю. Это портит поведение моего кода (а также start()
, который перезапускается с начала, а не проигрывает последний бит файла).
Это происходило на эмуляторах с 1.6 по 2.3 и хотя бы на одном устройстве с 2.2. Кто-нибудь знает об этой проблеме и что с этим делать?