如何自动更新版本

原创 2016年05月31日 15:18:38
第一步 服务器端:服务端提供一个借口,或者网址,我这里就用的服务器是tomcat,这里提供一个网址如下://也就是一个json数据接口 public static final String UPDATE_URL = "http://192.168.1.103:8080/update.json";我们来看下json数据参数:{//app名字appname: "爱新闻1.1",//服务器版本号serverVersion: "2",//服务器标志serverFlag: "1",//是否强制更新lastForce: "1",//apk下载地址,这里我已经下载了官方的apk,放到了服务器里面updateurl: "http://192.168.1.103:8080/36Kr.apk",//版本的更新的描述upgradeinfo: "V1.1版本更新,你想不想要试一下哈!!!"}第二步 客户端需要实现:首先我们要去解析服务端给的json,那么我们就要来创建一个model类了(代码过多,这里只有字段,getter和setter方法自己创建)://app名字 private String appname; //服务器版本 private String serverVersion; //服务器标志 private String serverFlag; //强制升级 private String lastForce; //app最新版本地址 private String updateurl; //升级信息 private String upgradeinfo;在这里使用了一个辅助类,基本和model字段差不多:public class UpdateInformation { public static String appname = MyApplication.getInstance() .getResources().getString(R.string.app_name); public static int localVersion = 1;// 本地版本 public static String versionName = ""; // 本地版本名 public static int serverVersion = 1;// 服务器版本 public static int serverFlag = 0;// 服务器标志 public static int lastForce = 0;// 之前强制升级版本 public static String updateurl = "";// 升级包获取地址 public static String upgradeinfo = "";// 升级信息 public static String downloadDir = "wuyinlei";// 下载目录}在进入app的时候,这个时候如果检测到服务器端有了新的版本,就回弹出提示框,提示我们更新。这个我们在MainActivity里面处理逻辑(onCreate()方法里面): OkhttpManager.getAsync(Config.UPDATE_URL, new OkhttpManager.DataCallBack() { @Override public void requestFailure(Request request, Exception e) { } @Override public void requestSuccess(String result) { try { Log.d("wuyiunlei",result); JSONObject object = new JSONObject(result); UpdateInfoModel model = new UpdateInfoModel(); model.setAppname(object.getString("appname")); model.setLastForce(object.getString("lastForce")); model.setServerFlag(object.getString("serverFlag")); model.setServerVersion(object.getString("serverVersion")); model.setUpdateurl(object.getString("updateurl")); model.setUpgradeinfo(object.getString("upgradeinfo")); tmpMap.put(DeliverConsts.KEY_APP_UPDATE, model); } catch (JSONException e) { e.printStackTrace(); } //发送广播 sendBroadcast(new Intent(UpdateReceiver.UPDATE_ACTION)); } });当然了,我们也要注册和结束广播: /** * 广播注册 */ private void registerBroadcast() { mUpdateReceiver = new UpdateReceiver(false); mIntentFilter = new IntentFilter(UpdateReceiver.UPDATE_ACTION); this.registerReceiver(mUpdateReceiver, mIntentFilter); } /** * 广播卸载 */ private void unRegisterBroadcast() { try { this.unregisterReceiver(mUpdateReceiver); } catch (Exception e) { e.printStackTrace(); } }接下来我们看下我们自定义的广播接收者UpdateReceiver .java:public class UpdateReceiver extends BroadcastReceiver { private AlertDialog.Builder mDialog; public static final String UPDATE_ACTION = "wuyinlei_aixinwen"; private SharedPreferencesHelper mSharedPreferencesHelper; private boolean isShowDialog; public UpdateReceiver() { } public UpdateReceiver(boolean isShowDialog) { super(); this.isShowDialog = isShowDialog; } @Override public void onReceive(Context context, Intent intent) { mSharedPreferencesHelper = mSharedPreferencesHelper .getInstance(MyApplication.getInstance()); //当然了,这里也可以直接new处hashmap HashMap tempMap = MyApplication.getInstance() .getTempMap(); UpdateInfoModel model = (UpdateInfoModel) tempMap //就是一个标志 .get(DeliverConsts.KEY_APP_UPDATE); try { /** * 获取到当前的本地版本 */ UpdateInformation.localVersion = MyApplication .getInstance() //包管理独享 .getPackageManager() //包信息 .getPackageInfo( MyApplication.getInstance() .getPackageName(), 0).versionCode; /** * 获取到当前的版本名字 */ UpdateInformation.versionName = MyApplication .getInstance() .getPackageManager() .getPackageInfo( MyApplication.getInstance() .getPackageName(), 0).versionName; } catch (Exception e) { e.printStackTrace(); } //app名字 UpdateInformation.appname = MyApplication.getInstance() .getResources().getString(R.string.app_name); //服务器版本 UpdateInformation.serverVersion = Integer.parseInt(model .getServerVersion()); //服务器标志 UpdateInformation.serverFlag = Integer.parseInt(model.getServerFlag()); //强制升级 UpdateInformation.lastForce = Integer.parseInt(model.getLastForce()); //升级地址 UpdateInformation.updateurl = model.getUpdateurl(); //升级信息 UpdateInformation.upgradeinfo = model.getUpgradeinfo(); //检查版本 checkVersion(context); } /** * 检查版本更新 * * @param context */ public void checkVersion(Context context) { if (UpdateInformation.localVersion < UpdateInformation.serverVersion) { // 需要进行更新 mSharedPreferencesHelper.putIntValue( //有新版本 SharedPreferencesTag.IS_HAVE_NEW_VERSION, 1); //更新 update(context); } else { mSharedPreferencesHelper.putIntValue( SharedPreferencesTag.IS_HAVE_NEW_VERSION, 0); if (isShowDialog) { //没有最新版本,不用升级 noNewVersion(context); } clearUpateFile(context); } } /** * 进行升级 * * @param context */ private void update(Context context) { if (UpdateInformation.serverFlag == 1) { // 官方推荐升级 if (UpdateInformation.localVersion < UpdateInformation.lastForce) { //强制升级 forceUpdate(context); } else { //正常升级 normalUpdate(context); } } else if (UpdateInformation.serverFlag == 2) { // 官方强制升级 forceUpdate(context); } } /** * 没有新版本 * @param context */ private void noNewVersion(final Context context) { mDialog = new AlertDialog.Builder(context); mDialog.setTitle("版本更新"); mDialog.setMessage("当前为最新版本"); mDialog.setNegativeButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show(); } /** * 强制升级 ,如果不点击确定升级,直接退出应用 * * @param context */ private void forceUpdate(final Context context) { mDialog = new AlertDialog.Builder(context); mDialog.setTitle("版本更新"); mDialog.setMessage(UpdateInformation.upgradeinfo); mDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent mIntent = new Intent(context, UpdateService.class); mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mIntent.putExtra("appname", UpdateInformation.appname); mIntent.putExtra("appurl", UpdateInformation.updateurl); //启动服务 context.startService(mIntent); } }).setNegativeButton("退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 直接退出应用 //ManagerActivity.getInstance().finishActivity(); System.exit(0); } }).setCancelable(false).create().show(); } /** * 正常升级,用户可以选择是否取消升级 * * @param context */ private void normalUpdate(final Context context) { mDialog = new AlertDialog.Builder(context); mDialog.setTitle("版本更新"); mDialog.setMessage(UpdateInformation.upgradeinfo); mDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent mIntent = new Intent(context, UpdateService.class); mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //传递数据 mIntent.putExtra("appname", UpdateInformation.appname); mIntent.putExtra("appurl", UpdateInformation.updateurl); context.startService(mIntent); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show(); } /** * 清理升级文件 * * @param context */ private void clearUpateFile(final Context context) { File updateDir; File updateFile; if (Environment.MEDIA_MOUNTED.equals(Environment .getExternalStorageState())) { updateDir = new File(Environment.getExternalStorageDirectory(), UpdateInformation.downloadDir); } else { updateDir = context.getFilesDir(); } updateFile = new File(updateDir.getPath(), context.getResources() .getString(R.string.app_name) + ".apk"); if (updateFile.exists()) { Log.d("update", "升级包存在,删除升级包"); updateFile.delete(); } else { Log.d("update", "升级包不存在,不用删除升级包"); } }}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

自动更新销毁旧版本.e 源码

  • 2012年01月12日 16:24
  • 719KB
  • 下载

android版本自动更新

  • 2013年03月04日 19:51
  • 1.2MB
  • 下载

快速自动更新Android Studio版本

快速自动更新Android Studio版本

autoUpdate自动更新版本

  • 2013年08月11日 07:19
  • 439KB
  • 下载

关于android中版本自动更新,从服务器下载下来的文件不能安装的问题

很多时候,由于我们不注意从服务器下载下来的更新包的APK文件不能安装。 可能原因  1、APK最低版本不支持当前设备   2、APK安装包签名不一致   3、正式本文要说的,也是程序猿可能会经常犯的错...

C# Winform版本自动更新代码

  • 2013年12月02日 14:45
  • 322KB
  • 下载

Winform/WinCE程序版本自动更新

1.更新程序Update.exe的实现 2.版本更新服务接口VersionService 3.客户端调用Update.exe实现版本更新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何自动更新版本
举报原因:
原因补充:

(最多只允许输入30个字)