Хорошо, я сам долго боролся с этим, поскольку все всегда говорили мне: «Просто используйте prepareAsync()
, и это будет работать.
Однако вам все равно придется подождать, пока достаточно буферизуется, прежде чем пытаться start()
, иначе вы получите ошибки и ничего не произойдет.
Прежде всего, пусть ваш класс music-streamer реализует OnPreparedListener
. Это будет использоваться для проверки того, достаточно ли буферизовано перед началом игры.
Затем используйте этот фрагмент кода, чтобы начать буферизацию и установить слушатель:
mediaPlayer.setDataSource(URL here);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(this);
Теперь вы настроили своего слушателя на проверку того, достаточно ли буферизовано или нет. Осталось сделать еще один шаг
public void onPrepared(MediaPlayer mediaplayer) {
// We now have buffered enough to be able to play
mediaPlayer.start();
}
Песня теперь сможет начать играть без ошибок и все такое.
Удачи!
Что касается того факта, что вы хотите воспроизводить музыку и иметь возможность остановить ее в любое время, вам нужно будет использовать Service
, если вы планируете иметь возможность остановить свою музыку от всех действий. В Интернете есть несколько учебных пособий по этому вопросу.