Android 断点续传下载

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

代码如下。

/**
	 * 作用:断点续传下载<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;
	}
时间: 2024-11-11 17:02:35

Android 断点续传下载的相关文章

Android实现网络多线程断点续传下载

本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点.   使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是:    (1)首先获得下载文件的长度,然后设置本地文件的长度.       HttpURLConnection.getContentLength();//获

android 多线程断点续传下载 二

在上一节中,我们简单介绍了如何创建多任务下载,但那种还不能拿来实用,这一集我们重点通过代码为大家展示如何创建多线程断点续传下载,这在实际项目中很常用. main.xml: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&

android 多线程断点续传下载 三

今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基本要领,我们先一起简单回顾下它的基本原理. http://blog.csdn.net/shimiso/article/details/6763664  android 多线程断点续传下载 一 http://blog.csdn.net/shimiso/article/details/6763986 

android 之断点续传详解三部曲之[二] → 断点续传下载

在上一篇中,我们简单介绍了如何创建多任务下载,但那种还不能拿来实用,这一集我们重点通过代码为大家展示如何创建多线程断点续传下载,这在实际项目中很常用. 和上一篇中一样,先来布局文件: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" and

Android之断点续传下载

断点续传下载,顾名思义,那就是我们在一次下载未结束时,退出下载,第二次下载时会接着第一次下载的进度继续下载.那么怎么记录第一次下载的数据呢,这里肯定就要用到数据库了.下面就是我创建数据库的一个SQLiteOpenHelper类.用来首次运行时创建数据库. DBHelper类: 1 package cn.yj3g.DBHelper; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase

android 多线程断点续传下载

http://blog.csdn.net/shimiso/article/details/6763986 多线程断点续传下载,这在实际项目中很常用. main.xml: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q

Android编程开发实现多线程断点续传下载器实例_Android

本文实例讲述了Android编程开发实现多线程断点续传下载器.分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载.这里采用数据库来记录下载的进度. 效果图:   断点续传 1.断点续传需要在下载过程中记录每条线程的下载进度 2.每次下载开始之前先读取数据库

Android实现网络多线程断点续传下载实例_Android

我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点. 使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是: (1)首先获得下载文件的长度,然后设置本地文件的长度. HttpURLConnection.getContentLength();//获取下载文件的长度 RandomAccessFile file = new RandomAc

Android编程开发实现多线程断点续传下载器实例

本文实例讲述了Android编程开发实现多线程断点续传下载器.分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载.这里采用数据库来记录下载的进度. 效果图: 断点续传 1.断点续传需要在下载过程中记录每条线程的下载进度 2.每次下载开始之前先读取数据库,查