首页 > 代码库 > 友盟在线参数+自动更新升级SDK实现指定版本强制更新升级

友盟在线参数+自动更新升级SDK实现指定版本强制更新升级

项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级。

友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。

不过友盟的开发人员也给出了勉强可行的方案:

使用友盟在线参数来控制哪些版本需要强制更新,哪些版本不需要

相关的内容如下:

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.我的做法:

配置在线参数,参数值配置规则:版本号,强制更新标志,版本号,强制更新标志,版本号,强制更新标志...


关键代码:

 

[java] view plaincopy
    1. private void prepare4UmengUpdate() {  
    2.         MobclickAgent.updateOnlineConfig( MyApplication.getContext() );  
    3.         //获取友盟在线参数  
    4.         String update_mode = MobclickAgent.getConfigParams( MyApplication.getContext(), "upgrade_mode" );  
    5.         Log.d(TAG, "MainActivity.prepare4UmengUpdate, update_mode = " + update_mode);  
    6.         if(StringUtils.isEmpty(update_mode)) {  
    7.             return;  
    8.         }  
    9.           
    10.         //转换为数组  
    11.         mUpdateModeArray = StringUtils.convertStrToArray(update_mode);  
    12.           
    13.         UmengUpdateAgent.setUpdateOnlyWifi(false); //在任意网络环境下都进行更新自动提醒  
    14.         UmengUpdateAgent.update(this);  //调用umeng更新接口  
    15.         String curr_version_name = null;  
    16.         try {  
    17.             curr_version_name = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;  
    18.         }  
    19.         catch (NameNotFoundException e) {  
    20.             // TODO Auto-generated catch block  
    21.             e.printStackTrace();  
    22.         }  
    23.           
    24.         for(int i=0; i<mUpdateModeArray.length; i+=2 ) {  
    25.             if(StringUtils.isEquals(mUpdateModeArray[i], curr_version_name)) {  
    26.                 if(StringUtils.isEquals(mUpdateModeArray[i + 1], "F"))  {  
    27.                     //对话框按键的监听,对于强制更新的版本,如果用户未选择更新的行为,关闭app  
    28.                     UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {  
    29.       
    30.                         @Override  
    31.                         public void onClick(int status) {  
    32.                             switch (status) {  
    33.                             case UpdateStatus.Update:  
    34.                                 break;   
    35.                             default:  
    36.                                 //友盟自动更新目前还没有提供在代码里面隐藏/显示更新对话框的  
    37.                                 //"以后再说"按钮的方式,所以在这里弹个Toast比较合适  
    38.                                 Toast.makeText(MyApplication.getContext(),   
    39.                                         "非常抱歉,您需要更新应用才能继续使用", Toast.LENGTH_LONG).show();  
    40.                             }  
    41.                         }  
    42.                     });                  
    43.                 }  
    44.                 break;  //只要找到对应的版本号,即结束循环  
    45.             }  
    46.         }  
    47.   
    48.     }