VideoViewがあり、Eメールインテントを開始すると一時停止します。メールインテントが完了したら、videoViewの再生を継続したいのですが、最初から再開します。
@Override
public void onPause() {
Log.d(TAG, "onPause called");
super.onPause();
videoView.pause();
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume called");
videoView.start();//resume() doesnt work
}
中断したところからvideoViewを再開するにはどうすればよいですか。
これはどうですか:
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume called");
videoView.seekTo(stopPosition);
videoView.start(); //Or use resume() if it doesn't work. I'm not sure
}
// This gets called before onPause so pause video here.
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
stopPosition = videoView.getCurrentPosition();
videoView.pause();
outState.putInt("position", stopPosition);
}
次に、onCreate()で、バンドルからstopPositionを呼び出し、グローバルに設定します
@Override
protected void onCreate(Bundle args) {
super.onCreate(args);
if( args != null ) {
stopPosition = args.getInt("position");
}
seekTo
を使用すると、ビデオの再開中にわずかにちらつきが発生します。より良いアプローチは、MediaPlayer
のメソッドを使用する代わりに、VideoView
クラスのpause()
およびstart()
メソッドを使用することです。 VideoView
のstart()
メソッドはビデオを最初から再開しますが、start()
メソッドがあった場合、MediaPlayer
のpause()
メソッドはビデオを再開します。以前に呼ばれていました。
これが公式のAndroid docによると
public void start()
APIレベル1で追加再生を開始または再開します。以前に再生が一時停止されていた場合、再生は一時停止された場所から続行されます。再生が停止された場合、または以前に開始されたことがない場合、再生は最初から開始されます。
MediaPlayer
のVideoView
にあるOnPreparedListener
に関連付けられたVideoView
を取得できます。
public class MainActivity extends Activity {
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
VideoView videoView = (VideoView) findViewById(R.id.videoView1);
videoView.setVideoPath(path);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mMediaPlayer = mp;
}
});
}
}
次に、後続のpause()
およびresume()
メソッドをMediaPlayer
オブジェクト自体で呼び出すことができます。
//To pause the video
mMediaPlayer.pause();
//To resume the video
mMediaPlayer.start();
非常にシンプルでありながら効率的なソリューション。それが役に立てば幸い!