断点续传下载,其实就是记录下原来下载的位置,然后从那个位置开始下载就是了。

代码如下。

/** * 作用:断点续传下载<BR> * 作者:peijiangping<BR> * 日期:2011-6-11 */public static int doDownloadTheFile_test(String strPath, String filePath,String filename, int mode, long size, Handler handler) {//file.size()即可得到原来下载文件的大小//下载路径String url = strPath;// 设置代理Header header = null;if (mode == 2) {//移动内网的时候使用代理url = format_CMWAP_URL(strPath);header = new BasicHeader("X-Online-Host",format_CMWAP_ServerName(strPath));}HttpResponse response = null;// 用来获取下载文件的大小HttpResponse response_test = null;try {HttpClient client = new DefaultHttpClient();HttpClient client_test = new DefaultHttpClient();HttpGet request = new HttpGet(url);HttpGet request_test = new HttpGet(url);if (header != null) {request.addHeader(header);}response_test = client_test.execute(request_test);//获取需要下载文件的大小long fileSize = response_test.getEntity().getContentLength();// 验证下载文件的完整性if (fileSize != 0 && fileSize == size) {return 1;}//设置下载的数据位置XX字节到XX字节Header header_size = new BasicHeader("Range", "bytes=" + size + "-"+ fileSize);request.addHeader(header_size);response = client.execute(request);InputStream is = response.getEntity().getContent();if (is == null) {throw new RuntimeException("stream is null");}SDCardUtil.createFolder(filePath);//获取文件对象,开始往文件里面写内容File myTempFile = new File(filePath + "/" + filename);RandomAccessFile fos = new RandomAccessFile(myTempFile, "rw");//从文件的size以后的位置开始写入,其实也不用,直接往后写就可以。有时候多线程下载需要用fos.seek(size);byte buf[] = new byte[1024];long downloadfilesize = 0;do {int numread = is.read(buf);if (numread <= 0) {break;}fos.write(buf, 0, numread);if (handler != null) {Message msg = new Message();downloadfilesize += numread;double percent = (double) (downloadfilesize + size)/ fileSize;msg.obj = String.valueOf(percent);handler.sendMessage(msg);// 更新下载进度百分比}} while (true);is.close();} catch (Exception ex) {ex.printStackTrace();return -1;}return 1;}

调用:

File file = new File(filepath);long size = 0;if (file.exists()) {size = file.length();}String downloadurl = "http://bs.baidu.com/appstore/apk_d9dba036522d0c2d71a77bc121b62d0b.apk";int value = HttpConnent.doDownloadTheFile_test(downloadurl,Contants.sdCardPath + "/" + id, id + mode, 1, size,handler);if (value == 1) {System.out.println("下载OK");} else {System.out.println("下载失败");}


更多相关文章

  1. Poco库使用 CMake 编译,支持 NetSSL
  2. 错误:Android(安卓)requires compiler compliance level 5.0 or 6
  3. android 反编译操作
  4. Found libBaiduMapSDK_base_v4_3_0.so error
  5. android animator 动画
  6. 在官网途径无法下载到android 源码时,,你可通过这种方式去下载
  7. EditText焦点控制及软键盘的隐藏显示
  8. Android(安卓)lint 自动检测并删除无用资源
  9. 使用Jenkins自动打包android

随机推荐

  1. Android(安卓)Adapter详解
  2. Android下的重力感应应用
  3. android EditText 设置输入的文字的格式
  4. Android(安卓)利用方向传感器实现 指南针
  5. Android(安卓)Scroller类介绍
  6. MQTT的学习研究(十五) MQTT 和android整合
  7. 类似的Timer循环服务设计
  8. android下通过xstream解析xml格式信息
  9. Android上如何查看CPU和内存信息
  10. Android官方入门文档[17]构建灵活的UI