Android MediaPlayer приостанавливается

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что моя пауза не всегда работает. У меня есть MediaPlayer в основном режиме, который управляется через ActionBarSherlock и onClick-слушатели. MediaPlayer использует ArrayList с URL-адресами файлов MP3 (некоторые из них длиной 1сек).

Пауза код:

if (player.isPlaying()) { if (player != null) { player.pause(); swapPlayIcon(1); isPaused = true; pauseMenuButt.setVisible(false); playMenuButt.setVisible(true); } }

swapPlayIcon (int) обрабатывает только видимость и сворачиваемые свопы.

Код запуска:

Iterator<uri> iterUri = tracks.iterator(); while (iterUri.hasNext()) { Uri tmpUri = iterUri.next(); try { player.reset(); player.setDataSource(String.valueOf(tmpUri)); player.prepare(); player.start(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
</uri>

РЕДАКТИРОВАТЬ

После тестирования я обнаружил, что проблема возникает в состоянии "между".

Я имею в виду, что когда мой MP3 файл длится 2 секунды, и я нажимаю на паузу, чтобы он не останавливался, потому что он просто закончил чтение одного файла и теперь перешел к следующему.

Я добавил:

} else { pauseLocked = true; }

чтобы приостановить, если статут и он не приземляется в нем вообще при тестировании. Поэтому я не уверен в проблеме "между ними", о которой я узнал ранее.

1 ответ

Ваша кнопка паузы не работает, потому что ее сообщение никогда не доходит до MediaPlayer, пока вы не запустили последний URL-адрес. Вы полностью блокируете поток, на котором работает ваш MediaPlayer (я предполагаю, что это поток пользовательского интерфейса, поскольку MediaPlayer находится в вашем основном действии). Если вы создаете свой MediaPlayer в том же потоке, что и ваш пользовательский интерфейс, вы должны использовать асинхронную версию prepare: prepareAsync. Вам нужно ответить, как только вы получите обратный вызов onMediaPrepared, а затем запустите медиа. Как только это произойдет, вы ничего не должны делать и дождитесь окончания печати, только тогда вы должны загрузить другой URL-адрес.

licensed under cc by-sa 3.0 with attribution.