Viewview Pausing and resuming
je suis nouveau à développement android et je suis la programmation d'un jeu. Mon jeu a des cutsceens qui jouent avant que chaque niveau commence, des cutsceens qui se font via videoview. Mon problème est que, lors d'une pause d'application, le cutsceen recommence à partir du début à la reprise.
@Override
public void onPause() {
super.onPause();
video.pause();
}
@Override
public void onResume()
{
super.onResume();
video.resume();
}
notre problème est que la vidéo ne reprend pas là où nous l'avons mis en pause, mais depuis le début.
6 réponses
vous pouvez utiliser ce
@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
}
ne devrait pas utiliser de vidéo.pause(), de la vidéo.resume(), parce que quand vous l'appelez, les données de mise en tampon seront perdues. C'est aussi la raison pour laquelle VideoView joue au début chaque fois que vous appelez vidéo.reprendre.)( Voir: VideoView onResume perd tampon de la vidéo
Solution:
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
}
}
au lieu de resume()
, utilisez à nouveau start()
.
Il va démarrer la lecture à partir du point où vous mis en pause la vidéo.
dans OnPause vous pouvez obtenir la position actuelle .
length=mVideoView.getCurrentPosition();
et la valeur de la longueur de l'utiliser dans OnResume ().
mVideoView.seekTo(length);
mVideoView.start()
amende de travail .
s'il vous plaît essayer ci-dessous code il fonctionnera tout à fait 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);
}
}
veuillez vous assurer que la ligne ci-dessous est mentionnée dans votre manifeste.xml
<activity
android:name="<Video Play Activity Name Here>"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="landscape"
></activity>
utilisez juste la méthode onSaveInstanseState au lieu de onPause et utilisez onRestart au lieu de onResume. Il sera certainement le travail. Acclamations !