Как корректно восстановиться, когда Android MediaPlayer входит в цикл ошибок: ошибка (-38,0) - PullRequest
2 голосов
/ 06 марта 2012

У меня есть 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 Ответ

4 голосов
/ 06 марта 2012

Чего-то не хватает в вашем коде? Мне не кажется, что он когда-либо запустит MediaPlayer где-нибудь в том, что вы опубликовали.

Мне также кажется странным, что вы звоните

player.reset();

после других. Я думаю, что это отменит setDataSource () и prepare (), с которым вы только что закончили. Попробуйте переместить сброс, чтобы он назывался первым.

и попробуйте добавить это в ваш обратный вызов onErrorListener:

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

Таким образом, он просто попытается переделать все, когда получит эту ошибку.

...