Android断点续传文件下载,简单实用的代码,如需要可参考。
希望不要觉得我又造一个轮子,我先用了网上代码觉得不好使用,而且发现有错误;
有一些功能强大的框架,我懒得去了解,去学习怎样使用它也要花时间;
简单实现自己的功能就好,我比较倾向于容易理解,简单实用。
本人老程序员一个,没有专注和擅长哪一个开发环境;
最近要开发一个自助售卖机的客户端,
今天要实现文件下载功能,用于更新设备上的广告(mp4视频文件),
还有用于版本升级,下载APK文件和Weex打包的文件;
设备都是用4G物联网卡,流量不多,所以要有断点续传。
下面是写好的下载类:
import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class WGDownloadManager
{
/**
* 下载文件
* @param downloadUrl
* @param savePath
* @param saveName
* @param callback
*/
public void downloadFile(final String downloadUrl, final String savePath, final String saveName, final IDownloadFile callback) {
checkDownloadFile(downloadUrl, new ICheckDownloadFile() {
@Override
public void onResult(long contentLength, boolean isAcceptRanges) {
/**
* 1. 下载的时候,先保存为saveName+“.tmp”结尾的临时文件
* 2. 下载完成后,再把临时文件重命名为正式文件名(saveName)
*/
if (callback != null) {
callback.onBegin(contentLength, isAcceptRanges);
}
try {
// 检查保存目录,不存在就创建
File fPath = new File(savePath);
if (!fPath.exists()) {
fPath.mkdirs();
}
// 检查文件是否已下载,已下载成功就直接返回
File fFile = new File(fPath, saveName);
if (fFile.exists() && fFile.length() == contentLength) {
if (callback != null) {
callback.onFinish(0);
}
return;
}
// 检查临时文件,已下载完成的,就改名并直接返回
File tmpFile = new File(fPath, saveName+".tmp");