MediaPlayer.setDataSource()和prepare()不工作-android

MediaPlayer.setDataSource()和prepare()不工作-android,android,media-player,prepare,Android,Media Player,Prepare,我正在尝试使用MediaPlayer对象,但没有取得多少成功。如果我将一个声音资源添加到我的原始文件夹中,并使用R中的int值调用它,它就可以正常工作。但我希望能够从url中提取一些东西 根据我读过的所有文档,setDataSource()应该接受带有文件url的字符串参数 我一直在prepare()语句中遇到IO异常。我甚至尝试在本地复制文件,但仍然没有成功 有人有什么想法吗 MediaPlayer mp = new MediaPlayer(); try { mp.setDat

我正在尝试使用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();
    }
请尝试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();
        }
    });
}

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

对于外部URL(如“”)非常有效,但在尝试本地资源(如“”)时会引发异常file://android_asset/sound.mp3") :(@richtaur是什么让你使用安卓资产而不是常规资源?MediaPlaye.create(Context-Context,int-resd)对于应用程序内部媒体文件来说应该很有用。这只会让我的东西更有条理:)资源文件夹已经足够了。