2014-08-04 1 views
0

Я использую mediaController с MediaPlayer, который содержится в службе привязки к действию. Проблема в том, что когда я начинаю играть музыку, mediaController не обновляется, пока я не нажму любую кнопку на нем. getCurrentPosition() возвращает 0, getDuration() возвращает 2025484024, который отображает 562: 38: 04 как продолжительность трека на mediaController. Все работает нормально, когда я нажимаю кнопку паузы/воспроизведения. Также я заметил, что когда в состоянии паузы, seekTo(i) не работает. Наверное, это как-то связано.Использование MediaController.MediaPlayerControl с сервисом

В журналах я получаю ошибку «MediaPlayer: попытка вызова getDuration без действительного медиаплеера».

Я думаю, что проблема в том, что я называю setController(), когда Служба»mediaPlayer объект не находится в подготовленном состоянии (я использую prepareAsync() подготовить mediaPlayer).

В чем проблема?

ответ

0

Я нашел решение.

Проблема в том, что я переопределил метод hide(), чтобы mediaController всегда был виден. Во время работы show() метод вызывается только один раз, пока не будет подготовлен медиаплеер. Обработчик, который отвечает за обновление панели поиска и других элементов mediacontroller, не получает сообщения (которое по умолчанию отправляется методом show()). Вы можете решить эту проблему, перезаписав любой метод mediacontroller, чтобы он отправилEmptyMessage (SHOW_PROGRESS) после установки медиаплеера.