Android MediaPlayer调用prepare()抛出IOException: Prepare failed.: status=0x1求助
解决方案
针对这个异常,结合你的代码和场景,可从以下几点排查修复:
未绑定Prepared监听器
你实现了onPrepared方法,但没有给mediaPlayerM设置监听器,导致MediaPlayer无法正确触发准备完成的回调,甚至引发流程异常。在setDataSource后添加:mediaPlayerM.setOnPreparedListener(this);同步prepare()不适合网络资源
播放网络音频时,同步的prepare()容易阻塞线程、引发超时失败,应改用异步方法:// 替换掉原有的mediaPlayerM.prepare(); mediaPlayerM.prepareAsync();检查URL与服务器响应
确认目标URL能正常返回音频文件,部分服务器会拦截无合法User-Agent的请求,可自定义DataSource添加请求头(API 23+支持):Uri uri = Uri.parse(lnk); MediaDataSource dataSource = new HttpMediaDataSource(uri) { @Override protected void onPrepareConnection(HttpURLConnection connection) throws IOException { super.onPrepareConnection(connection); connection.setRequestProperty("User-Agent", "Android MediaPlayer"); } }; mediaPlayerM.setDataSource(dataSource);Android版本的网络限制
Android 9及以上默认禁止明文HTTP请求,需在AndroidManifest.xml的application标签中添加:android:usesCleartextTraffic="true"或者配置网络安全策略允许该域名的明文请求。
MediaPlayer状态管理
确保mediaPlayerM初始化正确,建议在Service的onCreate中完成初始化:@Override public void onCreate() { super.onCreate(); mediaPlayerM = new MediaPlayer(); }
内容的提问来源于stack exchange,提问作者nat34
相关产品推荐
相关产品推荐

