大致的断点续传的代码逻辑就是这样,80%左右的都是这种样子的,只是显示的细节可能会有所不同。
/**
* @param update_URL 下载的tag
* @param name 操作类
* @param update_pro 进度条
*/
public static void setUpdate_Click(String update_URL,
String name,
final ProgressBar update_pro,
final TextView update_txt) {
Log_Ma.e("setUpdate_Click", "setUpdate_Click: " + update_URL + "/" + name);
DownloadListener downloadListener = new DownloadListener(update_URL) {
@Override
public void onStart(Progress progress) {
}
@Override
public void onProgress(Progress progress) {
update_pro.setVisibility(View.VISIBLE);
int pro = (int) (progress.fraction * 100);
update_pro.setProgress(pro);
switch (progress.status) {
case Progress.LOADING:
update_txt.setText(pro + "%");
break;
case Progress.PAUSE:
update_txt.setText("继续");
break;
case Progress.ERROR:
update_txt.setText("重下");
break;
case Progress.FINISH:
update_txt.setText("安装");
break;
default:
break;
}
}
@Override
public void onError(Progress progress) {
}
@Override
public void onFinish(File file, Progress progress) {
if (file.exists()) {
DownloadUtils.installAPK(file);
}
}
@Override
public void onRemove(Progress progress) {
update_pro.setVisibility(View.GONE);
update_pro.setProgress(0);
}
};
DownloadTask task;
Progress progress = DownloadManager.getInstance().get(update_URL);
if (progress == null) {
GetRequest<File> request = OkGo.get(update_URL);
task = OkDownload.request(update_URL, request)
.fileName(FileUtils.getApkName(name))
.register(downloadListener)
.save();
} else {
task = OkDownload.restore(progress).register(downloadListener);
}
Log_Ma.e("onclick", "setUpdate_Click: " + task.progress);
switch (task.progress.status) {
case Progress.NONE:
case Progress.WAITING:
task.start();
break;
case Progress.LOADING:
task.pause();
break;
case Progress.PAUSE:
task.start();
break;
case Progress.ERROR:
task.restart();
break;
case Progress.FINISH:
if (task == null || task.progress.status != Progress.FINISH) {
task.restart();
} else {
if (FileUtils.isExist(task.progress.filePath)) {
DownloadUtils.installAPK(new File(task.progress.filePath));
} else {
task.restart();
}
}
break;
default:
break;
}
}