Android MediaPlayer进入错误循环时如何正常恢复:错误(-38,0)

时间:2012-03-05 21:36:56

标签: android media-player

我有一个使用以下代码播放的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

从捕获的错误中恢复的最佳方法是什么?我应该中止媒体播放器,如果是这样,我该如何做到这一点?另外,我怎么能在第一时间停止进入这个错误循环?

谢谢!

1 个答案:

答案 0 :(得分:4)

您的代码中是否缺少某些内容?在我看来,它似乎并没有真正在你发布的任何地方启动MediaPlayer。

我打电话

对我来说也很奇怪
player.reset();

其他人之后。我认为这会撤消setDataSource(),以及刚刚完成的prepare()。尝试移动重置,以便它是第一个被调用的。

并尝试将其放入onErrorListener回调中:

player.reset();
player.setDataSource(videoURI);
player.prepare();

这样一来,当它收到这个错误时,它会尝试重拍整个事情。