项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级。
友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。
不过友盟的开发人员也给出了勉强可行的方案:
使用友盟在线参数来控制哪些版本需要强制更新,哪些版本不需要
相关的内容如下:
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
- 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); //调用umeng更新接口
- String curr_version_name = null;
- try {
- curr_version_name = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
- }
- catch (NameNotFoundException e) {
- // TODO Auto-generated catch block
- 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")) {
- //对话框按键的监听,对于强制更新的版本,如果用户未选择更新的行为,关闭app
- UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {
- @Override
- public void onClick(int status) {
- switch (status) {
- case UpdateStatus.Update:
- break;
- default:
- //友盟自动更新目前还没有提供在代码里面隐藏/显示更新对话框的
- //"以后再说"按钮的方式,所以在这里弹个Toast比较合适
- Toast.makeText(MyApplication.getContext(),
- "非常抱歉,您需要更新应用才能继续使用", Toast.LENGTH_LONG).show();
- }
- }
- });
- }
- break; //只要找到对应的版本号,即结束循环
- }
- }
- }
时间: 2024-10-21 13:01:17