本人先前的博客有对多文件分段断点续传的功能进行详细的介绍,如果你有兴趣可以先阅读Android多文件断点续传(一)——数据封装以及界面实现。本人在先前的基础上对代码进行了封装,本帖主要介绍如何集成封装好的框架快速实现多文件分段断点续传功能。
先看效果图
Github地址
——————————————————————————————————————————
1. 在Module下的build.gradle中添加依赖
dependencies {
... ...
compile 'com.androidkun:breakpoints:1.0.0'
}
2. 开始下载以及暂停下载
viewHoder.btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadUtils.downLoad(context, downloadInfo.getUrl(), downloadInfo.getSavePath(), downloadInfo.getFileName(), downloadInfo.getThreadCount());
}
});
viewHoder.btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadInfo.setDownState(context.getResources().getString(R.string.state_pause));
viewHoder.textState.setText(downloadInfo.getDownState());
DownloadUtils.pauseDownLoad(context, downloadInfo.getUrl());
}
});
参数解释:
/**
* 开始下载
* @param context
* 上下文
* @param url
* 下载链接
* @param savePath
* 保存路径
* @param fileName
* 下载线程数
* @param downloadThreadCount
*/
public static void downLoad(Context context,String url,String savePath,String fileName,int downloadThreadCount){
... ...
}
/**
* 暂停下载
* @param context
* 上下文
* @param url
* 下载链接
*/
public static void pauseDownLoad(Context context,String url){
... ...
}
3. 在Activity中注册EventBus获取下载进度和下载状态刷新UI
public class MainActivity extends AppCompatActivity {
... ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
initView();
initData();
}
private void initData() {
... ...
}
private void initView(){
... ...
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getEventMessage(EventMessage eventMessage) {
switch (eventMessage.getType()){
case EventMessage.TYPE_START://开始下载
DownloadData start = (DownloadData) eventMessage.getObject();
adapter.refreshState(start.getUrl(),start.getLength(),getResources().getString(R.string.state_downloading));
break;
case EventMessage.TYPE_PROGRESS://下载进度
DownloadData progress = (DownloadData) eventMessage.getObject();
//刷新列表进度
adapter.updateProgress(progress.getUrl(),progress.getProgress());
break;
case EventMessage.TYPE_FINISHED://下载完成
DownloadData finished = (DownloadData) eventMessage.getObject();
adapter.refreshState(finished.getUrl(),finished.getLength(),getResources().getString(R.string.state_finished));
break;
case EventMessage.TYPE_ERROR://下载失败
DownloadData error = (DownloadData) eventMessage.getObject();
adapter.refreshState(error.getUrl(),error.getLength(),getResources().getString(R.string.state_fail));
break;
case EventMessage.TYPE_PAUSE://下载暂停
DownloadData pause = (DownloadData) eventMessage.getObject();
adapter.refreshState(pause.getUrl(),pause.getLength(),getResources().getString(R.string.state_pause));
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
在getEventMessage()方法中可以获取到当前下载状态,DownloadData 封装了下载文件的url,下载进度,文件长度等信息。根据EventMessage的type区分事件类型,再做出相应处理。
public class DownloadData {
/**
* 下载链接
*/
private String url;
/**
* 下载进度(0-100)
*/
private int progress;
/**
* 文件大小
*/
private int length;
/**
* 下载消息
*/
private String msg;
/**
* 文件路径
*/
private String filePath;
... ...
}
更多细节请看源码
————————————————————————————————