Android断点续传
时间: 2023-10-22 20:04:36 浏览: 146
android断点续传
Android断点续传是指在文件下载过程中,如果下载中断或暂停后再次下载,能够从中断或暂停的位置继续下载,而不是重新开始下载整个文件。
在Android中实现断点续传的主要步骤如下:
1. 在开始下载之前,获取要下载文件的大小,并创建一个相同大小的本地文件。
2. 在下载过程中,通过设置请求头信息告知服务器从哪里开始传递数据,传递到哪里结束。
3. 使用RandomAccessFile的seek()方法将数据存储到本地文件的指定位置。
4. 在下载过程中,将下载的进度通过广播传递给Activity,以便更新UI。
具体代码实现如下:
首先,在Service的onStartCommand()方法中获取文件大小并创建本地文件:
```java
public void run() {
// ...
try {
URL url = new URL(fileInfo.getUrl());
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("GET");
int length = -1;
if (urlConnection.getResponseCode() == HttpStatus.SC_OK) {
// 获取文件长度
length = urlConnection.getContentLength();
}
if (length <= 0) {
return;
}
// 创建相同大小的本地文件
File dir = new File(DOWNLOAD_PATH);
if (!dir.exists()) {
dir.mkdir();
}
File file = new File(dir, FILE_NAME);
randomFile = new RandomAccessFile(file, "rwd");
randomFile.setLength(length);
// 将文件长度设置到fileInfo对象中
fileInfo.setLength(length);
// 通过Handler将对象传递给Service
mHandle.obtainMessage(0, fileInfo).sendToTarget();
// ...
} catch (Exception e) {
e.printStackTrace();
} finally {
// ...
}
}
```
然后,在MyThread中,根据文件的开始位置和当前位置进行断点续传:
```java
public class MyThread extends Thread {
// ...
public void run() {
// ...
HttpURLConnection urlConnection = null;
RandomAccessFile randomFile = null;
try {
URL url = new URL(fileInfo.getUrl());
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("GET");
// 设置请求头信息,告知服务器从哪里开始传递数据,传递到哪里结束
urlConnection.setRequestProperty("Range", "bytes=" + info.getStart() + "-" + info.getNow());
// 使用RandomAccessFile的seek()方法将数据存储到本地文件的指定位置
randomFile.seek(info.getNow());
// ...
// 使用广播将进度的百分比传递给Activity
// Activity再改变ProcessBar进行UI调整
// ...
} catch (Exception e) {
e.printStackTrace();
} finally {
// ...
}
}
}
```
阅读全文