46

我已经实现了以下代码,以便通过它的 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(); 
        }

刚刚调用活动时,视频可以正常工作,但是当视频结束时,我希望它再次播放,但它没有发生。

4

5 回答 5

47

看来你正在寻找

setOnCompletionListener(MediaPlayer.OnCompletionListener l)

更深入的解释可以在这里找到

编辑

VideoView显示了一个解决方案,其中使用,MediaController和完成后调用播放setOnCompletionListener()

于 2009-12-04T15:54:16.643 回答
21

这是我的工作代码块:

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

            }           
        });   
于 2011-04-03T18:00:24.520 回答
18
        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 似乎工作正常。

于 2013-01-28T09:51:09.633 回答
1

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

于 2011-04-11T13:19:19.083 回答
0

确保您在主线程上使用播放器,似乎回调只在主线程上有效。

于 2013-10-01T16:06:50.510 回答