用于视频完成的监听器(或处理程序)

时间:2009-12-04 15:46:54

标签: android media-player

我已实现以下代码,以测试通过其URL从远程Web服务器播放视频。

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 个答案:

答案 0 :(得分:41)

似乎你在寻找

setOnCompletionListener(MediaPlayer.OnCompletionListener l)

可以找到更深入的解释here

修改

This显示了一个解决方案,在完成后使用VideoViewMediaControllersetOnCompletionListener()调用回放。

答案 1 :(得分:18)

这是我工作的代码块:

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

            }           
        });   

答案 2 :(得分:15)

        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()似乎没有做任何事情,所以再次调用原始对象似乎工作正常。

答案 3 :(得分:1)

在你的onCompletion监听器中,尝试使用videoView.start();而不是mp.start();

答案 4 :(得分:0)

确保您在主线程上使用播放器,似乎回调仅适用于主线程。