wake-up-neo.com

Listener (oder Handler) für das Video-Finish

Ich habe den folgenden Code implementiert, um die Wiedergabe eines Videos von einem Remote-Webserver über seine URL zu testen.

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();

Der Code funktioniert auch im Android-Emulator einwandfrei. Ich möchte nur wissen, ob es einen Listener (oder Handler) gibt, der das Ende des Videos erkennt, das gerade wiedergegeben wird.

Aktualisieren:

Ich habe jetzt folgenden Code:

   @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(); 
        }

Wenn die Aktivität gerade aufgerufen wird, funktioniert das Video einwandfrei, aber wenn das Video fertig ist, möchte ich, dass es erneut abgespielt wird, was nicht der Fall ist.

36
Rui Gonçalves

Scheint, Sie suchen

setOnCompletionListener(MediaPlayer.OnCompletionListener l)

Eine ausführlichere Erklärung finden Sie hier

BEARBEITEN

Dies zeigt eine Lösung, bei der die Wiedergabe nach Abschluss mit VideoView, MediaController und setOnCompletionListener() aufgerufen wird. 

40

hier ist mein Code-Code:

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();
        }
    });

Ich fand heraus, dass der Listener feuerte. Das Problem war, dass mp.start () nichts zu tun schien. Der Aufruf von start für das ursprüngliche Objekt scheint also gut zu funktionieren. 

14
Brennon Reid

versuchen Sie in Ihrem Listener onCompletion, videoView.start () zu verwenden. anstelle von mp.start ();

1
rahil008

Stellen Sie sicher, dass Sie den Player im Haupt-Thread verwenden. Es scheint, dass der Rückruf nur im Haupt-Thread funktioniert.

0
n0sferat0k