当前位置:首页 > CN2资讯 > 正文内容

android agps 服务器 服务器 安卓

3天前CN2资讯


Android在线升级相关笔记一(解析服务器版本与当前版本比较)

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

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

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

下载tomcat请参考:

1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,如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.39\conf\web.xml中添加以下内容: doc application/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地址、相关信息) 2 http://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 { //不需升级 }


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20749.html

    分享给朋友:

    “android agps 服务器 服务器 安卓” 的相关文章

    国内VPS全解析:选择最佳虚拟专用服务器的指南

    国内VPS的概述 VPS,或者说虚拟专用服务器,是一种将一台物理服务器分割成多个虚拟服务器,以便多个用户可以共同使用。这样的设定不仅能够充分利用服务器的资源,还为用户提供了更高的灵活性与控制权。对于希望在网上进行业务拓展或个人项目的朋友们来说,国内VPS是一个非常合适的选择。 国内VPS的市场发展迅...

    CN2 GIA:享受高效稳定的国际网络连接服务

    CN2 GIA 概述 CN2 GIA,即全球互联网接入,是由中国电信推出的一个国际专线网络服务。作为CN2系列服务中最顶尖的产品,CN2 GIA 主要面向那些需要稳定、快速国际网络连接的用户。设想一下,有多少次我们正在进行重要的商务沟通,却因为网络问题而中断。针对这样的需求,CN2 GIA无疑提供了...

    LeaseWeb旧金山数据中心:为企业提供高效IT基础设施解决方案

    在谈到全球范围内的IT基础设施解决方案时,LeaseWeb无疑是一个重要的名字。成立于荷兰的LeaseWeb,凭借其卓越的服务和强大的网络能力,已经发展成为一家全球性的科技公司。它不仅提供传统的独立服务器服务,还涵盖了云计算、服务器托管等多样化的解决方案。对我而言,LeaseWeb就像是一座桥梁,连...

    如何选择支持ChatGPT的VPS服务:性价比与性能并重

    选择一个合适的VPS来支持ChatGPT的运行是一个重要的决策。首先性价比自然是我考虑的一个关键因素。市场上有许多VPS服务提供商,每个都有不同的价格和服务。找到那个能够在不牺牲性能的前提下,提供合理价格的,才是明智的选择。对于预算有限的用户来说,选择按小时计费的方案可能更有利,借此可以根据实际使用...

    Nginx Cache Control: 如何使用 No Cache 精确管理缓存策略

    作为一名开发者,我一直非常欣赏 Nginx 作为高性能 HTTP 和反向代理服务器的能力。Nginx 不仅在稳定性和可扩展性方面表现出色,它的缓存控制功能也相当强大。通过设置响应头,Nginx 能有效地管理客户端和代理服务器的缓存行为,让我在开发和部署时能够更灵活地处理资源的缓存。 使用缓存控制的好...

    APT攻击解析:如何应对高级持续性威胁

    APT攻击,或称为高级持续性威胁,是一种复杂的网络攻击形式。这种攻击的发起者通常是具有高度组织性和专业性的攻击者,可能是国家支持的黑客组织,或者其他有目的的恶意实体。他们的目标不仅仅是短期内造成损害,而是着眼于更长远的战略性目标,比如窃取国家机密、企业的核心技术或其他商业秘密。这种攻击对目标组织的声...