断点续传的方法
public void Down(){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(urlPath);
HttpURLConnection urlC =(HttpURLConnection) url.openConnection();
urlC.setRequestMethod("GET");
urlC.setDoOutput(true);
urlC.setDoInput(true);
RandomAccessFile randomAccessFile=new RandomAccessFile("/sdcard/hh.mp4","rw");
Log.e("##","23");
randomAccessFile.seek(start);
urlC.setRequestProperty("Range","bytes="+start+"-"+end);
if(urlC.getResponseCode()==206){ //断点续传是206
int contentLength = urlC.getContentLength();//总长度
InputStream is = urlC.getInputStream();
byte[] b=new byte[1024];
int len=0;
while ((len=is.read(b))!=-1){
randomAccessFile.write(b,0,len);
Message message = new Message();
sum+=len;
message.arg1=sum;
message.what=3;
String str="文件"+time+"Win"+start+"-"+end;
message.obj=str;
handler.sendMessage(message);
}
}
Message message=new Message();
if(flag){
message.what=0;
start=end+1;
end+=1024*1024;
}
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
获取最大值的线程
public void HH(){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(urlPath);
HttpURLConnection urlC =(HttpURLConnection) url.openConnection();
urlC.setRequestMethod("GET");
if(urlC.getResponseCode()==200){
max = urlC.getContentLength();
Message message = new Message();
message.what=2;
message.arg1=max;
handler.sendMessage(message);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
使用Handler来操作断点和进度条
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==0&&msg.obj!=null){
if(time<5){
time++;
Down();
}else{
handler.sendEmptyMessage(1);
}
Log.e("msg",msg.obj.toString());
}else if(msg.what==1){
}else if(msg.what==2){
seekBar.setMax(msg.arg1);
}else if(msg.what==3){
seekBar.setProgress(msg.arg1);
}
}
};
