您的位置:首页 > 理论基础 > 计算机网络

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

2017-11-20 20:41 501 查看
/**
* 判断传入数据是否网络资源
* @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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐