代码之家  ›  专栏  ›  技术社区  ›  IRPdevelop

恢复活动时重新启动MediaPlayer

  •  2
  • IRPdevelop  · 技术社区  · 9 年前

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

    我读过很多关于如何实现这一点的帖子,总之,我读过我应该给mediaPlayer打电话。“活动”的onPause()中的pause()和mediaPlayer。“活动”的onResume()中的play()。看起来很简单,但我一直在onResume:mediaPlayer.play()中得到IllegalStateException

    这就是我设置媒体播放器和视频视图的地方:

    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 回复  |  直到 9 年前
        1
  •  2
  •   IRPdevelop    9 年前

    好吧,我想出来了。在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();
        }
    }