Android工具之判断uri字符串是否网络资源同时设置进度条第二进度,同时监听播放卡顿

/**
 * 判断传入数据是否网络资源
 * @param uri
 * @return 是网络资源返回true(其中rtsp是网络直播),不是返回false
 */
public boolean isNetUri(String uri){
    boolean result = true;
    if(uri!=null){
        if(uri.toLowerCase().startsWith("http")||uri.toLowerCase().startsWith("rtsp")||uri.toLowerCase().startsWith("mms")){
            result = true;
        }
    }
    return result;

}

/**在handler里面每秒更新第二进度条背景*/

if(isNetUri){//网络资源
    int buffer = videoview.getBufferPercentage();
    int secondProgress=buffer*seekbarVideo.getMax()/100;
    seekbarVideo.setSecondaryProgress(secondProgress);
}else{//本地视频
    seekbarVideo.setSecondaryProgress(0);
}

if(isSystemMethod){//使用系统方法监听卡顿
    //设置视频播放卡顿的监听,一般是网速较慢时
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        videoview.setOnInfoListener(new MyOnInfoListener());
    }
}
class MyOnInfoListener implements MediaPlayer.OnInfoListener {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        switch(what){
            case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                ll_buffer.setVisibility(View.VISIBLE);
                break;
            case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                ll_buffer.setVisibility(View.GONE);
                break;
        }
        return false;
    }
}

/**使用自定义方法监听卡顿

自定义监听卡顿,如果能得到进度的,建议用自定义卡顿,会更准确;如果是直播,不能得到进度,只能用系统方法。

*/

if(!isSystemMethod && videoview.isPlaying()){
    int dis = current-prePosition;
    if(dis<500){//卡顿
        ll_buffer.setVisibility(View.VISIBLE);
    }else{//不卡
        ll_buffer.setVisibility(View.GONE);
    }
    prePosition=current;
}else{//播放暂停状态
    ll_buffer.setVisibility(View.GONE);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值