umeng自动更新之强制更新

来源:互联网 发布:做淘宝货源从哪来 编辑:程序博客网 时间:2024/04/27 20:43

 项目需求:最初我们的应用只要上传就会自动更新,老大希望可以控制APP的版本更新,让太低版本的应用强制更新。版本不太低的可以不用更新。

 实现步骤:

 1:根据在线参数比较本地版本,本地版本太低则强制更新。

 2:强制更新对话框只能有一个更新按钮 不能忽视,按back键退出应用。

问题:

怎么获取在线参数?

解决:

MobclickAgent.updateOnlineConfig(activity);
String upgrade_mode = MobclickAgent.getConfigParams(activity, "forceupdate");//获得线上参数


怎么获得本地版本信息?

解决:

   float local_version = 0;
        try {
            local_version = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode;//得到当前版本信息
        } catch (PackageManager.NameNotFoundException e) {
            L.i(TAG,"获取本地应用版本出错");
            e.printStackTrace();
        }


怎么根据是否是强制更新弹出不同的对话框?

解决:

首先判读是否需要强制更新,如果需要则UmengUpdateAgent.setUpdateAutoPopup(false);不自动弹出提示更新的对话框 而是弹出我们自定义的对话框


完整代码:

/** * Created by wyq on 2016/2/18. */public class VersionControlUpdate{    private static final String TAG = "VersionControlUpdate";    private Activity activity;    public static VersionControlUpdate getVersionControlUpdateInstance(){        return new VersionControlUpdate();    }    public boolean execute(Activity activity) {        this.activity = activity;        L.i(TAG, "VersionControlUpdate execute");        final boolean isforce = isForceUpdate(getUpgrade_Mode());        if(isforce){//如果强制更新 不自动弹出对话框 显示自定义的对话            UmengUpdateAgent.setUpdateAutoPopup(false);        }        UmengUpdateAgent.setUpdateOnlyWifi(false);        UmengUpdateAgent.update(activity);        UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() {            @Override            public void onUpdateReturned(int i, UpdateResponse updateResponse) {                switch (i) {                    case UpdateStatus.Yes:                        update(updateResponse, isforce);                        break;                    case UpdateStatus.No:                        break;                    default:                        break;                }                UmengUpdateAgent.setDefault();            }        });        return true;    }    /**获得线上参数     * @return     */    private String getUpgrade_Mode() {        UmengUpdateAgent.setDefault();        MobclickAgent.updateOnlineConfig(VersionControlUpdate.this.activity);        String upgrade_mode = MobclickAgent.getConfigParams(VersionControlUpdate.this.activity, "forceupdate");//获得线上参数        L.i(TAG, "upgrade_mode:" + upgrade_mode);        return upgrade_mode;    }    /**判断是否需要强制更新     * @param updateResponse     * @param isforce     */    private void update(UpdateResponse updateResponse,boolean isforce) {        AlertDialog dialog = new AlertDialog.Builder(activity, android.R.style.Theme_Translucent_NoTitleBar).create();        if (isforce) {            L.i(TAG, "isForceUpdate");            View v = LayoutInflater.from(activity).inflate(R.layout.umeng_force_update_dialog, null);            dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {                @Override                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {                    if (keyCode == KeyEvent.KEYCODE_BACK) {                        dialog.dismiss();                        activity.finish();                        return true;                    } else {                        return false;                    }                }            });            showDialog(v, updateResponse, dialog);        }    }    /**显示自定义强制更新对话框     * @param v     * @param updateResponse     * @param dialog     */    private void showDialog(View v, final UpdateResponse updateResponse,final Dialog dialog) {        View.OnClickListener listener = new View.OnClickListener() {            @Override            public void onClick(View v) {                if(v.getId()==R.id.umeng_update_id_ok){                    File file = UmengUpdateAgent.downloadedFile(                            activity, updateResponse);                    if (null == file) {                        downloadListener(dialog);                        UmengUpdateAgent.startDownload(activity,                                updateResponse);                    } else {// 已经下载完成的最新版APK,直接安装                        UmengUpdateAgent.startInstall(activity,                                file);                    }                }            }        };        TextView content = (TextView)v.findViewById(R.id.umeng_update_content);        content.setText( "最新版本: "+updateResponse.version +"\n更新包大小: "+formatSize(updateResponse.target_size)+"\n\n更新内容: \n"+updateResponse.updateLog);        Button ok = (Button)v.findViewById(R.id.umeng_update_id_ok);        ok.setOnClickListener(listener);        dialog.show();        dialog.setContentView(v);    }    /**设置强制更新的下载监听 显示loading界面     * @param dialog     */    private void downloadListener(final Dialog dialog) {        L.i(TAG,"downloadListener");        View v = LayoutInflater.from(activity).inflate(R.layout.umeng_download_dialog, null);        final ProgressBar progressBar =(ProgressBar)v.findViewById(R.id.downlaodbar);        final TextView text = (TextView)v.findViewById(R.id.text);        progressBar.setMax(100);        dialog.setContentView(v);        UmengUpdateAgent.setDownloadListener(new UmengDownloadListener() {            @Override            public void OnDownloadStart() {                progressBar.setProgress(0);            }            @Override            public void OnDownloadUpdate(int i) {                 text.setText("正在下载:"+ i +"%");                 progressBar.setProgress(i);            }            @Override            public void OnDownloadEnd(int i, String s) {                text.setText("下载完成");                progressBar.setProgress(100);                dialog.dismiss();            }        });    }    /**获取文件大小     * @param target_size     * @return     */    private String formatSize(String target_size) {        return Formatter.formatFileSize(activity, Long.valueOf(target_size));//工具类 根据文件大小自动转化为KB, MB, GB    }    /**是否强制更新     * @param online_version 根据线上参数判断本地应用是否强制更新     * @return     */    private boolean isForceUpdate(String online_version) {        float local_version = 0;        try {            local_version = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode;//得到当前版本信息        } catch (PackageManager.NameNotFoundException e) {            L.i(TAG,"获取本地应用版本出错");            e.printStackTrace();        }        L.i(TAG,"local_version:"+local_version);        if (online_version != null&&!"".equals(online_version)) {            try{                float online = Float.valueOf(online_version);                if (online > local_version) {//比较如果低  则强制更新                    return true;                }            }catch (Exception e){                L.i(TAG,"线上版本号解析错误");            }        }        return false;    }}

 VersionControlUpdate.getVersionControlUpdateInstance().execute(this);


运行界面:




0 0
原创粉丝点击