Из документов MediaPlayer
API :
Когда объект MediaPlayer
просто
создан с использованием нового или после reset()
называется, он находится в состоянии Idle ;
и после вызова release()
это
в состоянии End . Между этими двумя
Штаты это жизненный цикл
MediaPlayer
объект.
Это ошибка программирования до
вызывать методы, такие как
getCurrentPosition()
, ...
,
setAudioStreamType(int)
в простое
состояние.
Вы должны изучить диаграмму жизненного цикла MediaPlayer
и предоставленные примеры и переписать свой код в соответствии с ними. В этом случае вы видите, что вам нужно позвонить setDataSource()
до setAudioStreamType()
.
Примечание : В Android вам действительно нужно следить за событиями жизненного цикла для всего, что вы делаете, иначе вас укусят. Вы можете написать неверный код, и вы никогда не узнаете об этом до времени выполнения, или, что еще хуже, вы можете написать код, который, по вашему мнению, работает, и вы обнаружите только в странных обстоятельствах, что он не ... например. изменяется ориентация экрана, и метод обратного вызова в этом случае не совпадает или в других подобных ситуациях (кнопка «Домой» и т. д.).