项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级。
友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。
不过友盟的开发人员也给出了勉强可行的方案:
使用友盟在线参数来控制哪些版本需要强制更新,哪些版本不需要
相关的内容如下:
1.在线参数配置:
http://dev.umeng.com/analytics/android/advanced-integration-guide#3
2.强制更新官方代码:
https://github.com/nxzhou91/umeng-android-sdk-theme/blob/master/blogs/articles/force_update.md
3.我的做法:
配置在线参数,参数值配置规则:版本号,强制更新标志,版本号,强制更新标志,版本号,强制更新标志...
关键代码:
- private void prepare4UmengUpdate() {
- MobclickAgent.updateOnlineConfig( MyApplication.getContext() );
-
- String update_mode = MobclickAgent.getConfigParams( MyApplication.getContext(), "upgrade_mode" );
- Log.d(TAG, "MainActivity.prepare4UmengUpdate, update_mode = " + update_mode);
- if(StringUtils.isEmpty(update_mode)) {
- return;
- }
-
-
- mUpdateModeArray = StringUtils.convertStrToArray(update_mode);
-
- UmengUpdateAgent.setUpdateOnlyWifi(false);
- UmengUpdateAgent.update(this);
- String curr_version_name = null;
- try {
- curr_version_name = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
- }
- catch (NameNotFoundException e) {
-
- e.printStackTrace();
- }
-
- for(int i=0; i<mUpdateModeArray.length; i+=2 ) {
- if(StringUtils.isEquals(mUpdateModeArray[i], curr_version_name)) {
- if(StringUtils.isEquals(mUpdateModeArray[i + 1], "F")) {
-
- UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {
-
- @Override
- public void onClick(int status) {
- switch (status) {
- case UpdateStatus.Update:
- break;
- default:
-
-
- Toast.makeText(MyApplication.getContext(),
- "非常抱歉,您需要更新应用才能继续使用", Toast.LENGTH_LONG).show();
- }
- }
- });
- }
- break;
- }
- }
-
- }