MediaPlayer.setDataSource () и prepare () не работает - Android - PullRequest
15 голосов
/ 20 августа 2010

У меня проблемы с использованием объекта 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();
    }

Ответы [ 2 ]

21 голосов
/ 21 августа 2010

Попробуйте 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();
        }
    });
}
13 голосов
/ 24 июня 2011

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

...