恢复活动时重新启动MediaPlayer

时间:2016-05-23 21:17:33

标签: android android-mediaplayer

我正在尝试在调用Activity的onPause()时暂停视频。然后恢复它并在恢复活动时离开时继续播放。

我已经阅读了许多关于如何实现这一点的帖子,总结一下,我读过我应该在Activity的onPause()中调用mediaPlayer.pause(),在Activity的onResume()中调用mediaPlayer.play()。看起来很简单,但我在onResume中不断收到IllegalStateException:mediaPlayer.play()

这是我设置mediaplayer和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();
            }
        });

在我从API调用中获取videoUri后调用此代码,此调用在onCreate()中完成。

在onResume()onPause():

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

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

}

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

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

1 个答案:

答案 0 :(得分:1)

好的,我明白了。在onPreparedListener()中,我添加了一个验证来检查应用程序之前是否已暂停。如果它被暂停,我使用seekTo(),否则我只是从头开始播放视频。

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();
            }
        });

在onPause()中:

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

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