Во время прослушивания 1-часового mp3-потока, если пользователь теряет соединение (или переключается с WIFI на 3G и соединение «падает» на секунду), мы заметили, что MediaPlayer продолжает воспроизводить контент, который он буферизировал. Как только он исчерпает буферизованное содержимое, если он не будет завершен до конца файла, я бы предположил, что он запускает событие Error, но вместо этого он меняет состояние на PLAYBACK_COMPLETE. Как мы можем выяснить, произошло ли окончание воспроизведения из-за ошибки в соединении (потеря соединения) или из-за фактического завершения воспроизведения? Единственное, что мне удалось придумать, это сравнить currentPostion и totalDuration, когда MediaPlayer меняет состояние на PLAYBACK_COMPLETE. Есть ли способ лучше?
Android - обнаружение конца потока, а не ошибка подключения в MediaPlayer
Ответы (3)
Если он не вызвал событие onError()
, вы можете попробовать зарегистрироваться OnBufferingUpdateListener
и проверьте, достигает ли процент буферизации 100%. Если соединение потеряно, по завершении воспроизведения процент будет меньше 100%.
OnBufferingUpdateListener
?
- person Dheeraj Vepakomma; 10.01.2013
OnBufferingUpdateListener
будет меньше 100%, что указывает на потерю сети после завершения воспроизведения. Он должен достигать 100% только в том случае, если буферизация завершена. Я не понимаю проблемы с этим методом, который вы пытаетесь объяснить.
- person Dheeraj Vepakomma; 15.01.2013
Это действительно трудно узнать. Я думаю, что ваш подход currentPosition и totalDuration великолепен, но я предлагаю вам также прослушивать состояние сети устройства. Если соединение с сервером обрывается из-за клиента, вы можете узнать об этом таким образом. Это может помочь
Вы должны убедиться, что у вас есть OnErrorListener
, реализованный и внутри этот метод onError вы должны вернуть истинное значение. Если вы возвращаете ложное значение из этого метода, но произошла ошибка, в этом случае медиаплеер запускает OnCompletionListener
метод onCompletion.