天天看點

Android 終極解決VideoView是否在播放問題

如何判斷視訊正在播放?

setOnPreparedListener(MediaPlayer.OnPreparedListener l)::監聽視訊裝載完成的事件。
           

裝載完成就會播放?不會。

isPlaying() 
           

它說在播放就是在播放?不是。

mediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        //這段代碼的關鍵是MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START這個變量,
        // Android SDK中給出的注釋是:這個狀态表示展現了用于渲染的第一幀視訊,也就是這個時候才真正将視訊幀展示到了螢幕上。
        if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
         
        }
        return true;
    }
});
           

第一幀渲染了就在播放?也不是。

判斷是否在播放的唯一條件是:

video.getCurrentPosition()
           

是的,沒錯,隻有當進度條在變化時,視訊才在播放。

private static final int UPDATE_UI = 1;
    private int oldProgress = 0;

    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == UPDATE_UI) {
                if (null != video && video.isPlaying()) {
                    int currentProgress = video.getCurrentPosition();
                    if(oldProgress == currentProgress ){
                        showView(loading);
                    }else{
                       goneView(loading);
                    }
                    oldProgress = currentProgress;
                }
                mHandler.sendEmptyMessageDelayed(UPDATE_UI, 500);
            }
        }
    };
           

隻有這樣,顯示和隐藏加載動畫才是最準确的。