android关于版本更新问题二

来源:互联网 发布:centos 3306端口打开 编辑:程序博客网 时间:2024/05/16 18:29


           在Android中,检测版本更新是每个app很常见的功能,我们也尝试简单实现一下吧~


布局代码这里就不需要写了,一个按钮即可检测更新,这里我是以一个gson文件作为示例请求比对版本...


第一步解析数据:


<span style="font-size:18px;">//请求网络服务器上的版本              final String url="http://192.168.253.2:8080/gson/banbenwenjian.json";                             HttpUtils utils=new HttpUtils();                            utils.configTimeout(5000);                            utils.send(HttpMethod.GET, url, new RequestCallBack<String>() {                    @Override                  public void onFailure(HttpException arg0, String arg1) {                      // TODO Auto-generated method stub                                        }                    @Override                  public void onSuccess(ResponseInfo<String> arg0) {                      // TODO Auto-generated method stub                                            mNetData = arg0.result;                      Gson gson=new Gson();                      banben = gson.fromJson(mNetData, Banben.class);                      mUrl1 = banben.getUrl();                      mName = banben.getName();                      mVersion = banben.getVersion();                                            handler.sendEmptyMessage(0);                  }              });  </span>

handler接受  通过构造方法将数据传到UpdateManager类


private Handler handler=new Handler(){          public void handleMessage(android.os.Message msg) {              Log.d("u", mUrl1+mName+mVersion);              UpdateManager manager = new UpdateManager(getActivity(),mUrl1,mName,mVersion);              manager.checkUpdate();          };      };  

------------------------解析bean类------------

获取版本号  下载地址和名称

public class Banben implements Serializable{            private String version;      private String name;      private String url;      public String getVersion() {          return version;      }      public void setVersion(String version) {          this.version = version;      }      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public String getUrl() {          return url;      }      public void setUrl(String url) {          this.url = url;      }      @Override      public String toString() {          return "Banben [version=" + version + ", name=" + name + ", url=" + url                  + "]";      }          }  

-----------------------------UpdateManager-------------------


import java.io.File;  import java.io.FileOutputStream;  import java.io.IOException;  import java.io.InputStream;  import java.net.HttpURLConnection;  import java.net.MalformedURLException;  import java.net.URL;  import java.util.ArrayList;  import com.hao.happyshoppingapp.R;  import com.seven.bean.Banben;    import android.app.AlertDialog;  import android.app.Dialog;  import android.app.AlertDialog.Builder;  import android.content.Context;  import android.content.DialogInterface;  import android.content.Intent;  import android.content.DialogInterface.OnClickListener;  import android.content.pm.PackageManager.NameNotFoundException;  import android.net.Uri;  import android.os.Environment;  import android.os.Handler;  import android.os.Message;  import android.util.Log;  import android.view.LayoutInflater;  import android.view.View;  import android.widget.ProgressBar;  import android.widget.Toast;  public class UpdateManager {      /* 下载中 */      private static final int DOWNLOAD = 1;      /* 下载结束 */      private static final int DOWNLOAD_FINISH = 2;      /* 下载保存路径 */      private String mSavePath;      /* 记录进度条数量 */      private int progress;      /* 是否取消更新 */      private boolean cancelUpdate = false;            private Context mContext;      /* 更新进度条 */      private ProgressBar mProgress;      private Banben banben;      private Dialog mDownloadDialog;      private String url1;      private String name;      private String version;            private Handler mHandler = new Handler()      {          public void handleMessage(Message msg)          {              switch (msg.what)              {              // 正在下载              case DOWNLOAD:                  // 设置进度条位置                  mProgress.setProgress(progress);                  break;              case DOWNLOAD_FINISH:                  // 安装文件                  installApk();                  break;              default:                  break;              }          };      };                public UpdateManager(Context mContext, String url1, String name,              String version) {          super();          this.mContext = mContext;          this.url1 = url1;          this.name = name;          this.version = version;      }        /**      * 检测软件更新      */      public void checkUpdate()      {          if (isUpdate())          {              showNoticeDialog();              // 显示提示对话框          } else          {              Toast.makeText(mContext, R.string.soft_update_no, Toast.LENGTH_LONG).show();          }      }        /**      * 检查软件是否有更新版本      *       * @return      */      private boolean isUpdate()      {          // 获取当前软件版本          int versionCode = getVersionCode(mContext);          Log.d("versionCode", versionCode+"");                              if (null != name)          {              int serviceCode = Integer.valueOf(version);              // 版本判断              if (serviceCode > versionCode)              {                  return true;              }          }          return false;      }        private void request_serverban() {          // TODO Auto-generated method stub          Toast.makeText(mContext, "执行到了", 0).show();                }        /**      * 获取软件版本号      *       * @param context      * @return      */      private int getVersionCode(Context context)      {          int versionCode = 0;          try          {              // 获取软件版本号,对应AndroidManifest.xml下android:versionCode              versionCode = context.getPackageManager().getPackageInfo("com.hao.happyshoppingapp", 0).versionCode;          } catch (NameNotFoundException e)          {              e.printStackTrace();          }          return versionCode;      }        /**      * 显示软件更新对话框      */      private void showNoticeDialog()      {          // 构造对话框          AlertDialog.Builder builder = new Builder(mContext);          builder.setTitle(R.string.soft_update_title);          builder.setMessage(R.string.soft_update_info);          // 更新          builder.setPositiveButton(R.string.soft_update_updatebtn, new OnClickListener()          {              @Override              public void onClick(DialogInterface dialog, int which)              {                  dialog.dismiss();                  // 显示下载对话框                  showDownloadDialog();              }          });          // 稍后更新          builder.setNegativeButton(R.string.soft_update_later, new OnClickListener()          {              @Override              public void onClick(DialogInterface dialog, int which)              {                  dialog.dismiss();              }          });          Dialog noticeDialog = builder.create();          noticeDialog.show();      }        /**      * 显示软件下载对话框      */      private void showDownloadDialog()      {          // 构造软件下载对话框          AlertDialog.Builder builder = new Builder(mContext);          builder.setTitle(R.string.soft_updating);          // 给下载对话框增加进度条          final LayoutInflater inflater = LayoutInflater.from(mContext);          View v = inflater.inflate(R.layout.softupdate_progress, null);          mProgress = (ProgressBar) v.findViewById(R.id.update_progress);          builder.setView(v);          // 取消更新          builder.setNegativeButton(R.string.soft_update_cancel, new OnClickListener()          {              @Override              public void onClick(DialogInterface dialog, int which)              {                  dialog.dismiss();                  // 设置取消状态                  cancelUpdate = true;              }          });          mDownloadDialog = builder.create();          mDownloadDialog.show();          // 现在文件          downloadApk();      }        /**      * 下载apk文件      */      private void downloadApk()      {          // 启动新线程下载软件          new downloadApkThread().start();      }        /**      * 下载文件线程      *       * @author coolszy      *@date 2012-4-26      *@blog http://blog.92coding.com      */      private class downloadApkThread extends Thread      {          @Override          public void run()          {              try              {                  // 判断SD卡是否存在,并且是否具有读写权限                  if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))                  {                      // 获得存储卡的路径                      String sdpath = Environment.getExternalStorageDirectory() + "/";                      mSavePath = sdpath + "download";                      URL url = new URL(url1);                      // 创建连接                      HttpURLConnection conn = (HttpURLConnection) url.openConnection();                      conn.connect();                      // 获取文件大小                      int length = conn.getContentLength();                      // 创建输入流                      InputStream is = conn.getInputStream();                        File file = new File(mSavePath);                      // 判断文件目录是否存在                      if (!file.exists())                      {                          file.mkdir();                      }                      File apkFile = new File(mSavePath, name);                      FileOutputStream fos = new FileOutputStream(apkFile);                      int count = 0;                      // 缓存                      byte buf[] = new byte[1024];                      // 写入到文件中                      do                      {                          int numread = is.read(buf);                          count += numread;                          // 计算进度条位置                          progress = (int) (((float) count / length) * 100);                          // 更新进度                          mHandler.sendEmptyMessage(DOWNLOAD);                          if (numread <= 0)                          {                              // 下载完成                              mHandler.sendEmptyMessage(DOWNLOAD_FINISH);                              break;                          }                          // 写入文件                          fos.write(buf, 0, numread);                      } while (!cancelUpdate);// 点击取消就停止下载.                      fos.close();                      is.close();                  }              } catch (MalformedURLException e)              {                  e.printStackTrace();              } catch (IOException e)              {                  e.printStackTrace();              }              // 取消下载对话框显示              mDownloadDialog.dismiss();          }      };        /**      * 安装APK文件      */      private void installApk()      {          File apkfile = new File(mSavePath, name);          if (!apkfile.exists())          {              return;          }          // 通过Intent安装APK文件          Intent i = new Intent(Intent.ACTION_VIEW);          i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");          mContext.startActivity(i);      }  }  

重要方法在上面那个类都有注释到  可以看一看 都是有用的一些方法~~


最后给大家展示一下服务器上的gson文件,我是用tomcat服务器作为测试的,当然也可以随你的意愿了
{      "name": "HappyShopping",      "url": "http://192.168.253.2:8080/anzhuangbao/HappyShoppingApp.apk",      "version": 2  }  








0 0