private void toDownload(Context context) {
if (TextUtils.isEmpty(_newVerUrl)) return;
Download.getInstance().addTask(String.valueOf(_newVerUrl.hashCode()), CacheManager.getCachePath(context, CacheManager.APK),
_newVerUrl, new DownloadCallback() {
@Override
public void onStart(Progress progress) {
downloadProgressDialog.show();
}
@Override
public void onProgress(Progress progress) {
downloadProgressDialog.setMax(100);
downloadProgressDialog.setProgress((int) (100 * progress.fraction));
}
@Override
public void onError(Progress progress) {
EToast.get().showToast(Appli.getContext(), Appli.getContext().getString(com.cangrong.cyapp.baselib.R.string.app_download_error_str));
}
@Override
public void onFinish(File file, Progress progress) {
if (!isMustUpdate)
downloadProgressDialog.dismiss();
installApk(new File(progress.filePath));
}
@Override
public void onRemove(Progress progress) {
}
});
}
/**
* 安装软件
*
* @param file
*/
private void installApk(File file) {
Uri uri = Uri.fromFile(file);
Intent install = new Intent(Intent.ACTION_VIEW);
install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
install.setDataAndType(uri, "application/vnd.android.package-archive");
// 执行意图进行安装
Appli.getContext().startActivity(install);
}
public class Download {
public static void applicationInit(Appli appli) {
OkGo.getInstance().init(appli)
.setOkHttpClient(OKHTTP.getInstance().getOKGOClient()) //建议设置OkHttpClient,不设置会使用默认的
.setCacheMode(CacheMode.NO_CACHE) //全局统一缓存模式,默认不使用缓存,可以不传
.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局统一缓存时间,默认永不过期,可以不传
.setRetryCount(3); //全局统一超时重连次数,默认为三次,那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0
OkDownload okDownload = OkDownload.getInstance();
okDownload.getThreadPool().setCorePoolSize(1);
}
public static Download getInstance() {
return DownloadHolder.instance;
}
private static class DownloadHolder {
private static final Download instance = new Download();
}
private Download() {
}
public void addTask(String taskTag, String path, String url, DownloadCallback callback) {
// String fileName;
// String[] paths = url.split("\\?");
// if (paths.length > 1) {
// fileName = FileUtils.getFolderName(paths[0]);
// } else {
// fileName = FileUtils.getFolderName(url);
// }
addTask(taskTag, path, null, url, callback);
}
/**
* 下载文件
*
* @param taskTag 标志
* @param path 全路径(不带文件名)
* @param fileName 文件名
* @param url url地址
* @param callback 监听
*/
public void addTask(String taskTag, String path, String fileName, String url, DownloadCallback callback) {
DownloadTask task = OkDownload.request(taskTag, OkGo.get(url))
.folder(path);
if (!TextUtils.isEmpty(fileName)) {
task.fileName(fileName);
}
task.save().register(new DownloadListener(taskTag) {
@Override
public void onStart(Progress progress) {
if (callback != null)
callback.onStart(progress);
}
@Override
public void onProgress(Progress progress) {
if (callback != null)
callback.onProgress(progress);
}
@Override
public void onError(Progress progress) {
if (callback != null)
callback.onError(progress);
Log.i("adwdada",progress+"");
}
@Override
public void onFinish(File file, Progress progress) {
if (callback != null)
callback.onFinish(file, progress);
}
@Override
public void onRemove(Progress progress) {
if (callback != null)
callback.onRemove(progress);
}
});
task.start();
}
/**
* 获取下载信息
*
* @param taskTag
* @return
*/
public Progress getInfo(String taskTag) {
return DownloadManager.getInstance().get(taskTag);
}
/**
* 重新设置监听
*
* @param taskTag
* @param callback
*/
public void setListener(String taskTag, DownloadCallback callback) {
DownloadTask task = OkDownload.getInstance().getTask(taskTag);
if (task != null) {
if (task.listeners.size() > 0) {
task.listeners.remove(taskTag);
}
task.register(new DownloadListener(taskTag) {
@Override
public void onStart(Progress progress) {
if (callback == null) return;
callback.onStart(progress);
}
@Override
public void onProgress(Progress progress) {
if (callback == null) return;
callback.onProgress(progress);
}
@Override
public void onError(Progress progress) {
if (callback == null) return;
callback.onError(progress);
}
@Override
public void onFinish(File file, Progress progress) {
if (callback == null) return;
callback.onFinish(file, progress);
}
@Override
public void onRemove(Progress progress) {
if (callback == null) return;
callback.onRemove(progress);
}
});
}
}
public void stopTask(String taskTag) {
if (OkDownload.getInstance().hasTask(taskTag)) {
OkDownload.getInstance().getTask(taskTag).pause();
}
}
public void stopAll() {
OkDownload.getInstance().pauseAll();
}
}