MediaPlayer.setDataSource() и prepare() не работает - андроид

У меня возникла проблема с использованием объекта MediaPlayer и не имела большого успеха. Если я добавлю звуковой актив в свою сырую папку и вызову его с использованием значения int внутри R, он отлично работает. Но я хочу, чтобы можно было отключить URL-адрес.

В соответствии со всей документацией, которую я прочитал, setDataSource() должен принять параметр строки с URL-адресом в файл.

Я продолжаю получать исключение IO в инструкции prepare(). Я даже попытался скопировать файл локально и до сих пор не купил.

У кого-нибудь есть идеи?

MediaPlayer mp = new MediaPlayer();
try {
        mp.setDataSource("http://www.urltofile.com/file.mp3");
        mp.prepare();
        mp.start();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

Ответы

Ответ 1

Попробуйте MediaPlayer.create(), вы также можете начать работу только после того, как игрок действительно готов, например:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MediaPlayer player = MediaPlayer.create(this, Uri.parse("http://www.urltofile.com/file.mp3"));
    player.setOnPreparedListener(new OnPreparedListener() { 
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
}

Ответ 2

Для потоков вы должны вызвать prepareAsync(), который немедленно возвращается, а не блокируется, пока не будет буферизовано достаточное количество данных.