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

只有这样,显示和隐藏加载动画才是最准确的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值