package com.sun.bingo.util.update; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Environment; import com.afollestad.materialdialogs.MaterialDialog; import com.framework.dialog.DownloadDialog; import com.framework.dialog.TipDialog; import com.framework.dialog.ToastTip; import com.framework.okhttp.OkHttpProxy; import com.framework.okhttp.callback.FileCallBack; import com.framework.okhttp.callback.JsonCallBack; import com.framework.okhttp.request.RequestCall; import com.orhanobut.logger.Logger; import com.sun.bingo.BingoApp; import com.sun.bingo.R; import com.sun.bingo.control.UrlManager; import com.sun.bingo.model.VersionEntity; import com.sun.bingo.model.eventbus.EventEntity; import com.sun.bingo.model.eventbus.EventType; import com.sun.bingo.model.sharedpreferences.AccountSharedPreferences; import com.sun.bingo.util.AppUtil; import org.greenrobot.eventbus.EventBus; import java.io.File; import de.devland.esperandro.Esperandro; import okhttp3.Call; import okhttp3.Request; /** * Created by sunfusheng on 15/8/20. */ public class DownloadApk { private Context mContext; private DownloadDialog downloadDialog; private String fileName = "bingo.apk"; private String filePath = Environment.getExternalStorageDirectory() + File.separator + BingoApp.APP_ROOT_DIR + File.separator; private String apkPathName = filePath + fileName; private AccountSharedPreferences preferences; public DownloadApk(Context context) { this.mContext = context; preferences = Esperandro.getPreferences(AccountSharedPreferences.class, mContext); downloadDialog = new DownloadDialog(context); } public void checkVersion(final boolean showTip) { RequestCall build = OkHttpProxy.get().url(UrlManager.URL_APP_VERSION).build(); build.execute(new JsonCallBack<VersionEntity>() { @Override public void onSuccess(VersionEntity response) { int version = Integer.parseInt(response.getVersion()); if (version > AppUtil.getVersionCode(mContext)) { dealWithVersion(response); EventBus.getDefault().post(new EventEntity(EventType.EVENT_TYPE_UPDATE_APP, 0)); } else { EventBus.getDefault().post(new EventEntity(EventType.EVENT_TYPE_UPDATE_APP, 1)); if (showTip) { ToastTip.show("已是最新版本"); } } } @Override public void onFailure(Call request, Exception e) { } }); } public void dealWithVersion(final VersionEntity entity) { String versionInfo = "\n\n下载 " + entity.getName()+" ( V"+entity.getVersionShort()+" ) 替换当前版本 ( "+AppUtil.getVersionName(mContext)+" ) ?"; TipDialog tipDialog = new TipDialog(mContext); tipDialog.show(mContext.getString(R.string.update_app), entity.getChangelog()+versionInfo, mContext.getString(R.string.update_rightnow), mContext.getString(R.string.update_no), new MaterialDialog.ButtonCallback() { @Override public void onPositive(MaterialDialog dialog) { super.onPositive(dialog); preferences.ignore_version_name(""); preferences.is_need_update(false); download(entity.getInstallUrl()); } @Override public void onNegative(MaterialDialog dialog) { super.onNegative(dialog); preferences.ignore_version_name("V" + entity.getVersionShort()); } }); } private void download(final String url) { File file = new File(filePath); try { if (file.exists()) { file.delete(); } } catch (Exception e) { Logger.i(e.getMessage()); } RequestCall build = OkHttpProxy.get().url(url).build(); build.execute(new FileCallBack(filePath, fileName) { @Override public void onStart(Request request) { super.onStart(request); downloadDialog.show(); } @Override public void inProgress(float progress) { downloadDialog.getMaterialDialog().setProgress(((int)(progress*100))); } @Override public void onSuccess(File response) { downloadDialog.dismiss(); installPackage(apkPathName); } @Override public void onFailure(Call request, Exception e) { downloadDialog.dismiss(); } }); } // 安装应用 private void installPackage(String apkPath) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); mContext.startActivity(intent); } }