2013-08-05 1 views
1

Я сделал привязку с MediaPlayer элементами управления, которые загружают и воспроизводят аудио. Но, как это бывает, иногда mediaPlayer.prepare(); не достаточно быстрый, и он не всегда готов к воспроизведению.android java mediaplayer Service - как я могу узнать, подготовлен ли MediaPlayer?

Как я могу сделать такой метод, например myService.prepare(), где я могу попросить MediaPlayer подготовить и подождать?

+0

'prepare()' должен быть синхронным и блокировать до его завершения, 'prepareAsync()' - это то, что вызовет вашу проблему. – Robadob

+0

ну, я просто использую prepare(), но часто получаю незаконное исключение. Я не использую prepareAsync ... Если он блокирует - почему я получаю это незаконное исключение время от времени? – user2234594

ответ

2

Вы можете дождаться, когда событие OnPrepared будет запущено MediaPlayer.

http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html

Edit: подготовка() блокирует только для файлов, так что если вы работаете с чем-то еще, что может быть причиной.

+0

Да, я знаю это, но как я могу узнать из активности, MediaPlayer уже готов или нет? мой MediaPlayer находится в Сервисе, и я должен подготовить его одним способом (в Activity) – user2234594

+0

Я работаю с файлами на SD-карте - mediaPlayer.setDataSource(). Думаю, он подсчитывает файлы? Как ни странно, тот же файл может получить исключение Illegal with prepare() – user2234594

+0

Не уверен, что я понимаю вашу проблему: я думаю, вы можете использовать логическое значение, инициализированное false, и установить его в true в обратном вызове. Когда вы должны спросить о состоянии MediaPlayer, просто отправьте логическое значение в свою активность? – noKid