我在使用MediaPlayer对象时遇到了麻烦,并没有取得多大成功。如果我将一个声音资源添加到我的原始文件夹并使用R中的int值调用它,它可以正常工作。但我希望能够从网址中删除。
根据我读过的所有文档,setDataSource()应该接受带有文件url的字符串参数。
我在prepare()语句中不断收到IO异常。我甚至试过在本地复制文件,但仍然没有骰子。
有人有什么想法吗?
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();
}
答案 0 :(得分:21)
尝试使用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();
}
});
}
答案 1 :(得分:13)
对于流,您应该调用prepareAsync()
,它会立即返回,而不是阻塞,直到缓冲了足够的数据。