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);
运行界面:
- umeng自动更新之强制更新
- Umeng强制更新
- umeng自动更新
- umeng如何能够实现强制更新?
- Android应用手写自动更新以及强制更新
- umeng自动更新功能将会被去掉
- BW增量更新之自动更新及手工增量更新
- 友盟在线参数+自动更新升级SDK实现指定版本强制更新升级
- 友盟在线参数+自动更新升级SDK实现指定版本强制更新升级
- 关闭Win10强制自动更新驱动
- 友盟Umeng之分析统计
- 友盟Umeng统计、更新功能使用教程
- 友盟Umeng统计、更新功能使用教程
- 友盟Umeng统计、更新功能使用教程
- 使用 Umeng进行App 自定义更新
- 友盟Umeng统计、更新功能使用教程
- Umeng的手动的去刷新更新
- 【2013-8-13 23:55 星期二 ------友盟(umeng)自动更新组件,测试】
- hdu-1020
- Objective-C Runtime
- LA 3510
- 开始尝试开发项目
- Linux命令行学习之路(十)——网络初探
- umeng自动更新之强制更新
- HBASE 与 HDFS
- Struts2 用ModelDriven接收参数
- 右击表格弹出编辑、删除框
- Xcode7之后简单的真机测试
- Redis与Memcached的区别
- Binary Tree Level Order Traversal I II(102、107)
- POJ NO.2251 Dungeon Master(BFS,三维迷宫)
- 数位DP 题集