本文主要写的是Xutils的断点续传
这里主要用的是Xutils的第三方库文件:下载自己问度娘。
1.创建对象
HttpUtils http = new HttpUtils();
2.调用下载方法
http.download(url,下载路径+文件名,是否支持断点续传,是否自动改名,回调类)
3.实现回调类方法
public void onLoading(long total, long current, booleanisUploading){
//下载进行中,更新进度
}
public void onSuccess(ResponseInfo<File>responseInfo){
//下载完成
}
public void onFailure(HttpExceptionerror, String msg) {
//下载失败
}
代码如下:
public class MainActivity extends Activity {
private ProgressBar pb;
private TextView tv;
private HttpUtils mHttp;
private long mTotal;
private HttpHandler<File> mDownloadHandler;
private static final String URL = "http://dldir1.qq.com/qqfile/qq/QQ8.4/18380/QQ8.4.exe";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建httpUtils对象
mHttp = new HttpUtils();
//初始化控件
initView();
//点击事件
initEvent();
//Xutils方法
startDownload();
}
private void startDownload() {
/**
* 第一个参数为要下载的地址URL
* 第二个参数为你要下载到的地址
* 第三个参数为是否支持断点续传
* 第四个参数为是否自动改名
* 第五个参数为回掉类
*/
mDownloadHandler = mHttp.download(URL, "/mnt/sdcard/qq.exe", true, true, new RequestCallBack<File>() {
/**
* 实现回掉类的方法
*/
//下载进行中的时候调用此方法
public void onLoading(long total, long current, boolean isUploading) {
mTotal = total;
String totalSize = Formatter.formatFileSize(MainActivity.this, total);
String currentSize = Formatter.formatFileSize(MainActivity.this, current);
tv.setText(currentSize + "/" + totalSize);
// 计算并显示进度值
int percent = (int) (current * 100 / total);
pb.setProgress(percent);
}
//下载成功的时候调用此方法
public void onSuccess(ResponseInfo<File> responseInfo) {
if(responseInfo.result.length()==mTotal){
tv.setText("下载完成");
}
}
//下载失败的时候调用此方法
public void onFailure(HttpException error, String msg) {
//下载失败
tv.setText("下载失败");
}
});
}
private void initEvent() {
tv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//获取下载状态
boolean cancelled = mDownloadHandler.isCancelled();
if (cancelled) {
startDownload();
} else {
mDownloadHandler.cancel();
}
}
});
}
private void initView() {
tv = (TextView) findViewById(R.id.tv);
pb = (ProgressBar) findViewById(R.id.pb);
pb.setMax(100);
}
}