虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Android编程 > Android在线升级相关笔记一(解析服务器版本与当前版本比较)

Android在线升级相关笔记一(解析服务器版本与当前版本比较)
类别:Android编程   作者:码皇   来源:互联网   点击:

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较,如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级。一、首先用tomca

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较,

如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级。


一、首先用tomcat搭建服务器,用于开发测试。

下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625

1.在tomcat中新建自己的项目:

apache-tomcat-6.0.39webapps 目录下新建自己的项目文件夹,如myapp

然后在myapp文件夹中放入xml,apk等文件;

如,我的myapp项目中放入了upgrade.xml和一个Test.apk文件;

2.访问自己的项目:

PC浏览器打开xml:http://localhost:8080/myapp/upgrade.xml

Android设备打开xml:http://10.0.2.2:8080/myapp/upgrade.xml(或将10.0.2.2换成本机IP)

打开apk文件方法同理,正常情况会弹出下载对话框。

如,Test.apk的下载地址http://10.0.2.2:8080/myapp/Test.apk

如果tomcat中的文件不可下载(如apk等)访问错误,解决如下:

方法1:

把要下载的文件放到tomcat/webapps/ROOT目录下,访问http://本机IP:8080/下载的文件名(或http://10.0.2.2:8080/文件名);

方法2:在apache-tomcat-6.0.39confweb.xml中添加以下内容:

    docapplication/msword xls application/msexcel pdf application/pdf zip application/zip rar application/rar txt application/txt chm application/mshelp
保存,然后重启tomcat即可。

二、访问服务器,解析xml文件内容;

1.服务器上的xml文件内容:(里面主要有3个元素,版本号、url地址、相关信息)

    2http://10.0.2.2:8080/myapp/Test.apk版本更新至2.0,谢谢!

2. 新建一个实体类:(针对xml内容,封装需要得到的版本等元素)

    public class UpdataInfo {
    private int version;
    private String url;
    private String about;
    public int getVersion() {
    return version;
    }
    public void setVersion(int version) {
    this.version = version;
    }
    public String getUrl() {
    return url;
    }
    public void setUrl(String url) {
    this.url = url;
    }
    public String getAbout() {
    return about;
    }
    public void setAbout(String about) {
    this.about = about;
    }
    }
3.用pull解析器解析xml内容;(需传入一个InputStream)
    public UpdataInfo getUpdataInfo(InputStream is) throws Exception{
    UpdataInfo info = null;
    XmlPullParser parser = Xml.newPullParser();
    parser.setInput(is, "GB2312");
    //设置解析的数据源,编码格式 int event = parser.getEventType();
    while(event != XmlPullParser.END_DOCUMENT ){
    switch (event) {
    case XmlPullParser.START_DOCUMENT: //开始解析 //可在此做初始化相关工作 info = new UpdataInfo();
    Log.i("UpdatePullParser", "--START_DOCUMENT--");
    break;
    case XmlPullParser.START_TAG: Log.i("UpdatePullParser", "--START_TAG--");
    String tag = parser.getName();
    if("version".equals(tag)){
    info.setVersion(new Integer(parser.nextText()));
    //获取版本号 }
    else if ("url".equals(tag)){
    info.setUrl(parser.nextText());
    //获取url地址 }
    else if ("about".equals(tag)){
    info.setAbout(parser.nextText());
    //获取相关信息 }
    break;
    case XmlPullParser.END_TAG://读完一个元素,如有多个元素,存入容器中 break;
    default: break;
    }
    event = parser.next();
    }
    return info;
    //返回一个UpdataInfo实体 }

4.获取xml内容,返回一个InputStream,以便解析所需;

    public InputStream getXml() throws Exception {
    String TAG="URLConnect";
    String httpUrl = "http://10.0.2.2:8080/myapp/upgrade.xml";
    HttpURLConnection conn = (HttpURLConnection)new URL(httpUrl).openConnection();
    conn.setReadTimeout(5*1000);
    //设置连接超时的时间 // conn.setRequestMethod("GET");
    conn.connect();
    //开始连接 if(conn.getResponseCode() == 200){
    InputStream is = conn.getInputStream();
    return is;
    //返回InputStream }
    else {
    Log.e(TAG, "---连接失败---");
    }
    conn.disconnect();
    //断开连接 return null;
    }
5.在某个触发事件中进行调用,得到服务器的版本号;

    private int mLocalVersion = 1;
    //本地版本 private int mServerVersion = 2;
    //服务器版本//调用获得和解析xml的方法,(异步或线程中操作);private void check(){
    new Thread(){
    @Override public void run(){
    //需要在线程执行的方法 try {
    InputStream is = getXml();
    //获取xml内容 UpdataInfo info = getUpdataInfo(is);
    //调用解析方法 mServerVersion = info.getVersion();
    //获得服务器版本 Log.i(TAG, "check--infoVersion="+info.getVersion()+"infoURL="+info.getUrl() +"infoAbout="+info.getAbout());
    }
    catch (Exception e) {
    // TODO Auto-generated catch block e.printStackTrace();
    }
    //给handler发送一个消息 mHandler.sendEmptyMessage(new Message().what=1);
    }
    }
    .start();
    }
    //Handler消息接收机制 private Handler mHandler =new Handler(){
    //Handler接收到相应消息进行刷新ui等操作 public void handleMessage(Message msg){
    super.handleMessage(msg);
    if(msg.what == 1){
    //收到消息,在此进行ui相关操作,如将解析的内容显示出来。 }
    }
    }
    ;
6.获取本地版本号,与服务器的版本号对比;
    //获取本地版本方法 void getLocal(){
    PackageInfo packageInfo;
    try {
    packageInfo = getApplicationContext() .getPackageManager().getPackageInfo(getPackageName(), 0);
    mLocalVersion = packageInfo.versionCode;
    }
    catch (NameNotFoundException e) {
    // TODO Auto-generated catch block e.printStackTrace();
    }
    }
到这里,服务器的版本号和本地版本号都已有了,剩下的就是比较大小;

    if(mLocalVersion < mServerVersion){
    //有新版本,需要升级 }
    else {
    //不需升级 }

------------------------------OK先记录到这里,有空再继续-------------------thanks!-------------------




相关热词搜索: 版本 在线升级 服务器