Слушатель (или обработчик) для окончания видео - PullRequest
38 голосов
/ 04 декабря 2009

Я реализовал следующий код, чтобы проверить воспроизведение видео с удаленного веб-сервера через его 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();

Код работает просто отлично, даже в эмуляторе Android. Я просто хотел бы знать, есть ли какой-нибудь слушатель (или обработчик), чтобы определить окончание воспроизводимого видео?

Обновление:

У меня есть следующий код:

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

Когда просто вызывается активность, видео работает нормально, но когда видео заканчивается, я бы хотел, чтобы оно воспроизводилось снова, чего не происходит.

Ответы [ 5 ]

42 голосов
/ 04 декабря 2009

Кажется, вы ищете

setOnCompletionListener(MediaPlayer.OnCompletionListener l)

Более подробное объяснение можно найти здесь

EDIT

В этом показано решение, при котором воспроизведение вызывается после завершения с использованием VideoView, MediaController и setOnCompletionListener().

18 голосов
/ 03 апреля 2011

вот мой рабочий кусок кода:

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

            }           
        });   
15 голосов
/ 28 января 2013
        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();
        }
    });

Я обнаружил, что слушатель срабатывает, проблема была в том, что mp.start (), похоже, ничего не делает, поэтому повторный вызов start для исходного объекта, похоже, работает нормально.

1 голос
/ 11 апреля 2011

в вашем слушателе onCompletion, попробуйте использовать videoView.start (); вместо mp.start ();

0 голосов
/ 01 октября 2013

Убедитесь, что вы используете плеер в главном потоке, похоже, обратный вызов работает только в основном потоке.

...