Android(安卓)断点续传下载
16lz
2021-01-26
断点续传下载,其实就是记录下原来下载的位置,然后从那个位置开始下载就是了。
代码如下。
/** * 作用:断点续传下载<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("下载失败");}
更多相关文章
- Poco库使用 CMake 编译,支持 NetSSL
- 错误:Android(安卓)requires compiler compliance level 5.0 or 6
- android 反编译操作
- Found libBaiduMapSDK_base_v4_3_0.so error
- android animator 动画
- 在官网途径无法下载到android 源码时,,你可通过这种方式去下载
- EditText焦点控制及软键盘的隐藏显示
- Android(安卓)lint 自动检测并删除无用资源
- 使用Jenkins自动打包android