2016-05-23 11 views
0

アクティビティのonPause()が呼び出されたときにビデオを一時停止しようとしています。それから活動を再開するときにそれが残った瞬間にそれを再開し、演奏を続ける。アクティビティを再開するときにMediaPlayerを再起動

私はこれを達成する方法について多くの記事を読んだことがあります。アクティビティのonPause()でmediaPlayer.pause()を呼び出し、ActivityのonResume()でmediaPlayer.play() 。シンプルなようだが、私はonResumeにIllegalStateExceptionが得続ける:mediaPlayer.play()

私はメディアプレーヤと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(); 
    } 
} 
+0

?アクティビティが作成されるたびに作成されませんか? –

+0

@Perroloco上記のようにonPrepared()からmpを取得し、そのmpをonPauseとonResumeから呼び出せるようにmpの参照を保持するために、そのmpをクラス属性であるmediaPlayerに割り当てます。 – IRPdevelop

答えて

1

[OK]を、私はそれを考え出しました。 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で():あなたはMediaPlayerのオブジェクトをインスタンス化します

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

    if (mediaPlayer != null) { 
     resumedActivity = true; 
     pausedMilliSec = mediaPlayer.getCurrentPosition(); 
    } 
} 
関連する問題