web-dev-qa-db-fra.com

Videoview Pause et reprise

Je suis nouveau dans le développement Android et je programme un jeu. Mon jeu a des cutceens qui se jouent avant chaque niveau, des cutceens qui se font par vidéo. Mon problème est que lors d’une pause d’application, le cutceen recommence 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 à la place de la pause, mais dès le début. 

34
Athos

Vous pouvez utiliser ceci

@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
}

original post

50
Sanket Patel

Vous ne devez pas utiliser video.pause (), video.resume (), car lorsque vous l'appelez, les données mises en mémoire tampon seront perdues. C’est également la raison pour laquelle POURQUOI VideoView est lu au début lorsque vous appelez video.resume () . Voyez-le: VideoView onResume perd la partie mise en mémoire 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
    }   
}
20
Khang .NT

Au lieu de resume(), utilisez start() à nouveau.
La lecture commencera à partir du point où vous avez mis en pause la vidéo.

17
Flynn81

Dans OnPause, vous pouvez obtenir la position actuelle.

length=mVideoView.getCurrentPosition();

et longueur utiliser dans OnResume ().

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

fonctionne bien.

11

S'il vous plaît essayez ci-dessous le code cela fonctionnera absolument 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);
    }
}

assurez-vous que la ligne ci-dessous est mentionnée dans votre fichier Manifest.xml

<activity
        Android:name="<Video Play Activity Name Here>"
        Android:configChanges="orientation|keyboardHidden|screenSize" 
        Android:screenOrientation="landscape"
        ></activity>
0
Anuj J Pandey

Utilisez simplement la méthode onSaveInstanseState au lieu de onPause et utilisez onRestart au lieu de onResume. Cela fonctionnera certainement. À votre santé !

0
user8324061