我有一个使用以下代码播放的MediaPlayer:
private void playVideo() {
if (videoURI == null) {
showToast("Please, set the video URI in HelloAndroidActivity.java in onClick(View v) method");
} else {
new Thread(new Runnable() {
public void run() {
try {
player.setOnErrorListener(new OnErrorListener()
{
@Override
public boolean onError(MediaPlayer mp,
int what, int extra) {
Log.e("MEDIAPLAYER ERRORS",
"what: " + what + " extra: " + extra);
return false;
}
});
Log.d("video","---+ in main run");
player.setDataSource(videoURI);
player.prepare();
player.reset();
} catch (IllegalArgumentException e) {
Log.d("video","---+ illegal arg");
showToast("Error while playing video");
Log.i(TAG, "========== IllegalArgumentException ===========");
e.printStackTrace();
} catch (IllegalStateException e) {
Log.d("video","---+ illegal state");
showToast("Error while playing video");
Log.i(TAG, "========== IllegalStateException ===========");
e.printStackTrace();
} catch (IOException e) {
Log.d("video","---+ general error");
showToast("Error while playing video. Please, check your network connection.");
Log.i(TAG, "========== IOException ===========");
e.printStackTrace();
}
}
}).start();
}
}
出错时,我的应用程序进入无限错误循环,并显示以下消息:
03-05 13:27:23.035: E/MediaPlayer(6289): stop called in state 0
03-05 13:27:23.035: E/MediaPlayer(6289): error (-38, 0)
03-05 13:27:23.035: E/MediaPlayer(6289): Error (-38,0)
03-05 13:27:23.043: E/MEDIAPLAYER ERRORS(6289): what: -38 extra: 0
从捕获的错误中恢复的最佳方法是什么?我应该中止媒体播放器,如果是这样,我该如何做到这一点?另外,我怎么能在第一时间停止进入这个错误循环?
谢谢!
答案 0 :(得分:4)
您的代码中是否缺少某些内容?在我看来,它似乎并没有真正在你发布的任何地方启动MediaPlayer。
我打电话
对我来说也很奇怪player.reset();
其他人之后。我认为这会撤消setDataSource(),以及刚刚完成的prepare()。尝试移动重置,以便它是第一个被调用的。
并尝试将其放入onErrorListener回调中:
player.reset();
player.setDataSource(videoURI);
player.prepare();
这样一来,当它收到这个错误时,它会尝试重拍整个事情。