17

我在使用 MediaPlayer 对象时遇到了困难,但没有取得太大的成功。如果我将声音资产添加到我的原始文件夹并使用 R 中的 int 值调用它,它工作正常。但我希望能够从 url 中提取内容。

根据我读过的所有文档, 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();
    }
4

2 回答 2

23

试试 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();
        }
    });
}
于 2010-08-21T00:10:58.150 回答
14

对于流,您应该调用prepareAsync()立即返回,而不是阻塞直到缓冲了足够的数据。

于 2011-06-24T12:52:14.137 回答