studio soportado setonpreparedlistener reproducir puede play mediaplayer este contenido android lifecycle videoview

android - soportado - Videoview Pausa y reanudación



setonpreparedlistener mediaplayer android (6)

Soy nuevo en el desarrollo de Android y estoy programando un juego. Mi juego tiene cutters que juegan antes de que comience cada nivel, cutsceens que se hacen a través de videoview. Mi problema es que, luego de una pausa en la aplicación, el cutsceen comienza nuevamente desde el principio cuando se reanuda.

@Override public void onPause() { super.onPause(); video.pause(); } @Override public void onResume() { super.onResume(); video.resume(); }

Nuestro problema es que el video en realidad no se reanuda desde donde lo detuvimos, sino desde el principio.


En OnPause puedes obtener la posición actual.

length=mVideoView.getCurrentPosition();

y el uso de valor de longitud en OnResume ().

mVideoView.seekTo(length); mVideoView.start()

funcionando bien .


En lugar de resume() , use start() nuevamente.
Comenzará la reproducción desde el punto donde pausó el video.


No debe usar video.pause (), video.resume (), porque cuando lo llame, los datos del búfer se perderán. Esa es también la razón por la cual VideoView se reproduce al COMIENZO cada vez que se llama a video.resume (). Véalo : VideoView onResume pierde parte del video almacenado en el búfer

Solución:

VideoView videoView; MediaPlayer mp; videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { this.mp = mp; } }); public void pause(){ //NOT videoview.pause(); Needn''t save Stop position if (mp != null){ mp.pause(); } } public void resume(){ //NOT videoview.resume(); if (mp != null){ mp.start(); //Video will begin where it stopped } }


Por favor, intente el siguiente código, funcionará absolutamente bien

@Override public void onPause() { super.onPause(); stopPosition = videoView.getCurrentPosition(); //stopPosition is an int if (videoView.isPlaying()) videoView.pause(); } @Override public void onResume() { super.onResume(); if (videoView != null) { videoView.seekTo(stopPosition); } }

por favor, asegúrese de que la línea siguiente se mencione en su Manifest.xml

<activity android:name="<Video Play Activity Name Here>" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="landscape" ></activity>


Puedes usar esto

@Override public void onPause() { Log.d(TAG, "onPause called"); super.onPause(); stopPosition = videoView.getCurrentPosition(); //stopPosition is an int videoView.pause(); } @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 }

publicación original


Solo use el método SaveStateSeState en lugar de onPause y use onRestart en lugar de onResume. Definitivamente funcionará. ¡Salud!