MediaPlayer.setDataSource()和prepare()不起作用 - Android

17

我正在尝试使用MediaPlayer对象,但没有取得太多成功。如果我将声音资产添加到我的原始文件夹中并使用R中的整数值调用它,则可以正常工作。但是我想能够从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();
    }
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();
        }
    });
}

1
@richtaur,是什么让你使用Android资产而不是常规资源?MediaPlayer.create(Context context,int resid)对于应用程序内部媒体文件应该非常有效。 - Konstantin Burov
只是让我的东西更有条理而已 :) 资源文件夹足够好了。 - richtaur

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接