Android MediaPlayer setDataSource () Бросая ошибка IllegalStateException - PullRequest
2 голосов
/ 29 ноября 2011

Хотя я использую почти один и тот же код для воспроизведения двух видео, первое работает отлично, а второе - нет.Когда я нажимаю кнопку следующего видео, происходит сбой программы:

WARN/System.err(15726): java.lang.IllegalStateException
WARN/System.err(15726):     at android.media.MediaPlayer.setDataSource(Native Method)

Исходный код:

первый код воспроизведения:

    mediaPlayer = new MediaPlayer();
    playURI = receiveIntent.getStringExtra("playURI");
    showDebugInfo("play uri "+playURI);
    Log.e("Gplayer on create", "play uri "+playURI);
    try {
        mediaPlayer.setDataSource(playURI);
    } catch (IllegalArgumentException e) {
        Log.v(LOGTAG, e.getMessage());
        finish();
    } catch (IllegalStateException e) {
        Log.v(LOGTAG, e.getMessage());
        finish();
    } catch (IOException e) {
        Log.v(LOGTAG, e.getMessage());
        finish();
    }

при нажатии следующей кнопкизапускает следующий код:

   String uri = listAdapter.getItem(position).getItem().getFirstResource().getValue();
    showDebugInfo(" Uri "+uri);
    if(mediaPlayer != null){
        mediaPlayer.stop();
    }
    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(uri);
        mediaPlayer.prepareAsync();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        finish();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        finish();
    }

Почему это происходит?и я проверяю только две части: первая - это новый медиаплеер, а вторая - позволить медиаплееру остановиться и сбросить то же самое.

1 Ответ

0 голосов
/ 15 февраля 2019

У меня была такая же проблема.

Вам нужно позвонить mediaPlayer.reset(); перед вызовом второго видео mediaPlayer.setDataSource(uri); причина в том, что функцию mediaPlayer.setDataSource(uri); можно вызывать только в состоянии ожиданияи mediaPlayer.reset(); - это функция, которая переводит вас в состояние ожидания.

Я понимаю это из этого ответа , хотя вопрос немного отличается.

...