如何检测VideoView是播放视频还是缓冲?

时间:2013-04-11 06:21:33

标签: android android-videoview

如何检测VideoView是播放视频还是缓冲? 我想显示一个弹出窗口,说视频正在缓冲。

在android API级别17中有一个回调setOnInfoListener可以提供这些信息,但我使用的是API级别15(android ICS)。

我也看到了这个问题“Detect if a VideoVIew is buffering”,但建议的解决方案适用于MediaPlayer,而不适用于VideoView

那我如何检测VideoView是否正在缓冲?这是一个很好的解决方案,运行一个线程来检查当前的搜索/进度级别,并根据它决定视频是播放还是缓冲。

更新

这不仅仅是我需要检查视频是否只在视频开头播放或缓冲,我想通过视频支付来检查它。

3 个答案:

答案 0 :(得分:11)

要检查VideoView是否正在播放,您可以使用其isPlaying()方法

if ( videoView.isPlaying() )
{
     // Video is playing
}
else
{
     // Video is either stopped or buffering
}

要检查VideoView是否已完成,请使用以下内容

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{
    @Override
    public void onCompletion(MediaPlayer mp) 
    {
             // Video Playing is completed
    }
});

答案 1 :(得分:2)

我带来了以下hack,以便不实现自定义VideoView。如果当前位置与之前的1秒相同,则每1秒检查一次。如果是,则视频正在缓冲。如果没有,视频真的在播放。

final Handler handler = new Handler(); 
Runnable runnable = new Runnable() { 
    public void run() {
        int duration = videoView.getCurrentPosition();
        if (old_duration == duration && videoView.isPlaying()) {
            videoMessage.setVisibility(View.VISIBLE);
        } else {
            videoMessage.setVisibility(View.GONE);
        }
        old_duration = duration;

        handler.postDelayed(runnable, 1000);
    }
};
handler.postDelayed(runnable, 0);

答案 2 :(得分:1)

           videoView.setOnPreparedListener(new OnPreparedListener()
           {

               public void onPrepared(MediaPlayer mp)
               {                  
                   progressDialog.dismiss();     // or hide any popup or what ever
                   videoView.start();           // start the video
               }
           });