Android MediaPlayer класс выдает java.lang.IllegalStateException после возобновления деятельности - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь приостановить и возобновить VideoView с MediaPlayer в методах onPause () и onResume (), но в методе onResume () MediaPlayer выдает исключение java.lang.IllegalStateException. Я не выпустил MediaPlayer, но я думаю, что MediaPlayer автоматически освобождается после приостановки активности. Как мне справиться с этим?

private MediaPlayer mediaPlayer;

void prepareVideo() {
    videoView = new VideoView(context.getApplicationContext());
    String path = "android.resource://" + getPackageName() + "/" + 
    R.raw.my_video;
    videoView.setVideoPath(path);
}

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mediaPlayer = mp;
        mediaPlayer.start();
    }
});

@Override
protected void onResume() {
    super.onResume();
    if (mediaPlayer != null) {
        mediaPlayer.start();
    }
}

@Override
protected void onPause() {
    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
        mediaPlayer.pause();
    }
    super.onPause();
}

Исключение:

    Caused by: java.lang.IllegalStateException
    at android.media.MediaPlayer._start(Native Method)
    at android.media.MediaPlayer.start(MediaPlayer.java:1194)
    at co.myapp.app.reborn.myappTestActivity.onResume(myappTestActivity.java:370)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1259)
    at android.app.Activity.performResume(Activity.java:6347)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3110)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3152) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5530) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:734) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Нам просто нужно реализовать интерфейс MediaPlayer.OnSeekCompleteListener и установить MediaPlayer в методе onSeekComplete.

private MediaPlayer mediaPlayer;

@Override
public void onSeekComplete(final MediaPlayer mp) {
    mediaPlayer = mp;
}
0 голосов
/ 25 июня 2018

Посмотрите на диаграмму состояний медиаплеера в документации по Android

Диаграмма состояний MediaPlayer

В соответствии со схемой вы должны вызвать setDataSource () и prepare ()перед вызовом start ().

Возможно, что-то случилось раньше.Ваш logcat должен указывать вам правильное направление.

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

К сожалению, таким образом, ваше воспроизведение будет возобновлено с нуля.

Вы можете использовать команду поиска для возобновления позиции, сохраненной во время приостановки действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...