web-dev-qa-db-fra.com

Listener (ou handler) pour la finition vidéo

J'ai implémenté le code suivant afin de tester la lecture d'une vidéo à partir d'un serveur Web distant via son URL.

videoView = (VideoView)this.findViewById(R.id.videoView);
        MediaController mc = new MediaController(this);
        videoView.setMediaController(mc);
        videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/Android/movie.mp4"));
        videoView.requestFocus();

Le code fonctionne très bien, même dans l'émulateur Android. Je voudrais juste savoir s'il y a un auditeur (ou un gestionnaire) pour détecter la fin de la vidéo en cours de reproduction.

Mettre à jour:

J'ai le code suivant maintenant:

   @Override
        protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.player);

        videoView = (VideoView)this.findViewById(R.id.videoView);
        playVideo();

        // video finish listener
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                // not playVideo
                            // playVideo();

                            mp.start();
            }
        });
    }

    public void playVideo() {
            MediaController mc = new MediaController(this);
            videoView.setMediaController(mc);
            videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/Android/movie.mp4"));
            videoView.requestFocus(); 
        }

Lorsque l'activité vient d'être appelée, la vidéo fonctionne bien, mais lorsque la vidéo est terminée, j'aimerais qu'elle soit rejouée, ce qui n'est pas le cas.

36
Rui Gonçalves

On dirait que tu cherches

setOnCompletionListener(MediaPlayer.OnCompletionListener l)

Des explications plus détaillées peuvent être trouvées ici

MODIFIER

Ceci montre une solution dans laquelle la lecture est appelée après l'achèvement en utilisant VideoView, MediaController et setOnCompletionListener()

40
Anthony Forloney

voici mon morceau de code de travail:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        {           
            public void onCompletion(MediaPlayer mp) 
            {
                // Do whatever u need to do here

            }           
        });   
18
Imon
        vidView=(VideoView)findViewById(R.id.vidView);
    vidView.setMediaController(null);
    vidView.setVideoPath( "/mnt/external_sd/somerandommovie.3gp" );
    vidView.start();

    vidView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
                        vidView.start();
        }
    });

J'ai trouvé que l'auditeur était en train de tirer, le problème était que mp.start () ne semblait rien faire, donc appeler à nouveau l'objet initial semble bien fonctionner. 

14
Brennon Reid

dans votre écouteur onCompletion, essayez d’utiliser videoView.start (); au lieu de mp.start ();

1
rahil008

Assurez-vous que vous utilisez le lecteur sur le fil principal, il semble que le rappel ne fonctionne que sur le fil principal.

0
n0sferat0k