package org.lzh.framework.updateplugin; import android.app.Application; import android.util.Log; import org.json.JSONException; import org.json.JSONObject; import org.lzh.framework.updateplugin.widget.ToastTool; import org.lzh.framework.updatepluginlib.UpdateConfig; import org.lzh.framework.updatepluginlib.callback.UpdateCheckCB; import org.lzh.framework.updatepluginlib.callback.UpdateDownloadCB; import org.lzh.framework.updatepluginlib.model.Update; import org.lzh.framework.updatepluginlib.model.UpdateParser; import org.lzh.framework.updatepluginlib.util.Utils; import java.io.File; /** * @author Administrator */ public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // UpdateConfig为全局配置。当在其他页面中。使用UpdateBuilder进行检查更新时。 // 对于没传的参数,会默认使用UpdateConfig中的全局配置 ToastTool.init(this); UpdateConfig.getConfig() // 必填:数据更新接口,url与checkEntity两种方式任选一种填写 .url("https://raw.githubusercontent.com/yjfnypeu/UpdatePlugin/master/update.json") // .checkEntity(new CheckEntity().setMethod(HttpMethod.GET).setUrl("http://www.baidu.com")) // 必填:用于从数据更新接口获取的数据response中。解析出Update实例。以便框架内部处理 .jsonParser(new UpdateParser() { @Override public Update parse(String response) { /* 此处根据上面url或者checkEntity设置的检查更新接口的返回数据response解析出 * 一个update对象返回即可。更新启动时框架内部即可根据update对象的数据进行处理 */ try { JSONObject object = new JSONObject(response); Update update = new Update(response); // 此apk包的更新时间 update.setUpdateTime(System.currentTimeMillis()); // 此apk包的下载地址 update.setUpdateUrl(object.optString("update_url")); // 此apk包的版本号 update.setVersionCode(object.optInt("update_ver_code")); // 此apk包的版本名称 update.setVersionName(object.optString("update_ver_name")); // 此apk包的更新内容 update.setUpdateContent(object.optString("update_content")); // 此apk包是否为强制更新 update.setForced(false); // 是否显示忽略此次版本更新按钮 update.setIgnore(object.optBoolean("ignore_able",false)); return update; } catch (JSONException e) { return null; } } }) // TODO: 2016/5/11 除了以上两个参数为必填。以下的参数均为非必填项。 .checkCB(new UpdateCheckCB() { @Override public void onCheckError(Throwable t) { ToastTool.show("更新失败:code:" + t.getMessage()); // Toast.makeText(MyApplication.this, "更新失败:code:" + code + ",errorMsg:" + errorMsg, Toast.LENGTH_SHORT).show(); } @Override public void onUserCancel() { ToastTool.show("用户取消更新"); } @Override public void onCheckIgnore(Update update) { ToastTool.show("用户忽略此版本更新"); } @Override public void onCheckStart() { // 此方法的回调所处线程异于其他回调。其他回调所处线程为UI线程。 // 此方法所处线程为你启动更新任务是所在线程 Utils.getMainHandler().post(new Runnable() { @Override public void run() { ToastTool.show("启动更新任务"); } }); } @Override public void hasUpdate(Update update) { ToastTool.show("检查到有更新"); } @Override public void noUpdate() { ToastTool.show("无更新"); } }) // apk下载的回调 .downloadCB(new UpdateDownloadCB(){ @Override public void onUpdateStart() { ToastTool.show("下载开始"); } @Override public void onUpdateComplete(File file) { ToastTool.show("下载完成"); } @Override public void onUpdateProgress(long current, long total) { System.out.println("current = [" + current + "], total = [" + total + "]"); } @Override public void onUpdateError(Throwable t) { ToastTool.show("下载失败:" + t.getMessage()); } }) // 自定义更新检查器。 // .updateChecker(new UpdateChecker() { // @Override // public boolean check(Update update) { // 此处根据上面jsonParser解析出的update对象来判断是否此update代表的 // 版本应该被更新。返回true为需要更新。返回false代表不需要更新 // return false; // } // }) /* // 自定义更新接口的访问任务 .checkWorker(new UpdateWorker() { @Override protected String check(String url) throws Exception { // TODO: 2016/5/11 此处运行于子线程。在此进行更新接口访问 return null; } }) // 自定义apk下载任务 .downloadWorker(new DownloadWorker() { @Override protected void download(String url, File file) throws Exception { // TODO: 2016/5/11 此处运行于子线程,在此进行文件下载任务 } }) // 自定义下载文件缓存,默认下载至系统自带的缓存目录下 .fileCreator(new ApkFileCreator() { @Override public File create(String versionName) { // TODO: 2016/5/11 versionName 为解析的Update实例中的update_url数据。在些可自定义下载文件缓存路径及文件名。放置于File中 return null; } }) // 自定义更新策略,默认WIFI下自动下载更新 .strategy(new UpdateStrategy() { @Override public boolean isShowUpdateDialog(Update update) { // 是否在检查到有新版本更新时展示Dialog。 return false; } @Override public boolean isAutoInstall() { // 是否自动更新。此属性与是否isShowInstallDialog互斥 return false; } @Override public boolean isShowInstallDialog() { // 下载完成后。是否显示提示安装的Dialog return false; } @Override public boolean isShowDownloadDialog() { // 在APK下载时。是否显示下载进度的Dialog return false; } }) // 自定义检查出更新后显示的Dialog, .updateDialogCreator(new DialogCreator() { @Override public Dialog create(Update update, Activity activity, UpdateBuilder updateBuilder) { // TODO: 2016/5/11 此处为检查出有新版本需要更新时的回调。运行于主线程,在此进行更新Dialog的创建 return null; } }) // 自定义下载时的进度条Dialog .downloadDialogCreator(new DownloadCreator() { @Override public UpdateDownloadCB create(Update update, Activity activity) { // TODO: 2016/5/11 此处为正在下载APK时的回调。运行于主线程。在此进行Dialog自定义与显示操作。 // TODO: 2016/5/11 需要在此创建并返回一个UpdateDownloadCB回调。用于对Dialog进行更新。 return null; } }) // 自定义下载完成后。显示的Dialog .installDialogCreator(new InstallCreator() { @Override public Dialog create(Update update, String s, Activity activity) { // TODO: 2016/5/11 此处为下载APK完成后的回调。运行于主线程。在此创建Dialog return null; } })*/; } }