1、首先我们先创建好下载的位置–根据url创建文件。
/**
* <p>Title: FlieStorageManager</p >
* <p>Description: TODO</p >
* <p>Company: ihaveu</p >
*
* @author MaWei
* @date 2018/2/5
*/
public class FlieStorageManager {
public static FlieStorageManager sManager = new FlieStorageManager();
private Context mContext;
public static FlieStorageManager getInstance(){
return sManager;
}
public void init(Context mContext){
this.mContext = mContext;
}
public FlieStorageManager() {
}
/**
* 根据url 设置文件名返回文件
* @param url
* @return
*/
public File getFileByName(String url){
File parent;
// 判断手机有没有挂载SD卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
parent = mContext.getExternalCacheDir();
}else {
// 没有SD卡保存在系统目录的cache下
parent = mContext.getCacheDir();
}
String fileName = Md5Uills.generateCode(url);
// 路径、 文件名
File file = new File(parent, fileName);
if(!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
}
我们的路径很明显放在的cach目录下。
那么我们简单封装一下okhttp联网的框架的几个请求。
然后给大家看一下简单的单线程下载是怎么实现的
/**
* <p>Title: HttpManager</p >
* <p>Description: 联网请求工具类</p >
* <p>Company: ihaveu</p >
*
* @author MaWei
* @date 2018/2/5
*/
public class HttpManager {
public static HttpManager mManager = new HttpManager();
/** 请求失败*/
public static final int NETWORK_ERROR_CODE = 1;
/** 获取不到文件的总长度*/
public static final int CONTENT_LENGTH_ERROR_CODE = 2;
/** 队列中存在下载的任务*/
public static final int TASK_RUNNING_ERROR_CODE = 3;
/** okhttp请求类*/
private OkHttpClient mClient;
private Context mContext;
private void init(Context mContext){
this.mContext = mContext;