IRPdevelop
IRPdevelop

Reputation: 281

Restart MediaPlayer when resuming activity

I'm trying to pause a video when Activity's onPause() is called. And then resume it and keep playing at the moment it was left when resuming the activity.

I've read many posts on how to achieve this and to sum up, I've read that I should call mediaPlayer.pause() in Activity's onPause(), and mediaPlayer.play() in Activity's onResume(). Seems simple, but I keep getting IllegalStateException in onResume: mediaPlayer.play()

This is where I'm setting mediaplayer and videoview:

videoView.setMediaController(mediaController);
        videoView.setVideoURI(videoUri);
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                // Pass MediaPlayer to control playback speed
                mediaController.setMediaPlayer(mp);
                mp.start();
                mediaPlayer = mp;
                hideProgressBar();
            }
        });

This code is called after I get videoUri from an API call, this call is done in onCreate().

And in onResume() onPause():

    @Override
protected void onResume() {
    super.onResume();

    if (mediaPlayer != null) {
        mediaPlayer.start();
    }

}

@Override
protected void onPause() {
    super.onPause();

    if (mediaPlayer != null ) {
        mediaPlayer.pause();
    }
}

Upvotes: 2

Views: 1898

Answers (1)

IRPdevelop
IRPdevelop

Reputation: 281

Ok, I figured it out. In onPreparedListener() I add a validation to check if the app was previously paused or not. If it was paused, I use seekTo(), otherwise I just play the video from the beginning.

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                // Pass MediaPlayer to control playback speed
                mediaController.setMediaPlayer(mp);
                mediaPlayer = mp;
                if (resumedActivity) {
                    mp.seekTo(pausedMilliSec);
                }
                mp.start();
                hideProgressBar();
            }
        });

And in onPause():

@Override
protected void onPause() {
    super.onPause();

    if (mediaPlayer != null) {
        resumedActivity = true;
        pausedMilliSec = mediaPlayer.getCurrentPosition();
    }
}

Upvotes: 2

Related Questions