近期给项目app做升级。对Android应用程序更新稍有研究,分享一下我的心得。

既然是更新,那么一定是要联网和下载的。所以联网和存储訪问权限时一定要有的:

<!-- 权限申请 -->

    <uses-permission android:name="android.permission.INTERNET" />
<!-- 联网权限 -->

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 存储权限 -->

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

能够用xml的方式和数据库、php等方式检測升级版本号

XML:

<?

xml version="1.0" encoding="utf-8"?>

<update>

        <version>2.0<ersion>

        <description>这里写一些这个版本号的特点</description>

        <apkurl>填写应用下载下载地址</apkurl>

        <!--这里的ip地址一定要写你server所在的电脑的ip地址。我们会在Security这个文件夹以下放置一下new.apk的,用来更新的-->

</update>

匹配一下:

public class UpdateInfoParser {

public static UpdateInfo getUpdateInfo(InputStream is) throws Exception {

UpdateInfo info = new UpdateInfo();

XmlPullParser xmlPullParser = Xml.newPullParser();

xmlPullParser.setInput(is, "utf-8");

int type = xmlPullParser.getEventType();

while (type != XmlPullParser.END_DOCUMENT) {

switch (type) {

case XmlPullParser.START_TAG:

if (xmlPullParser.getName().equals("version")) {

info.setVersion(xmlPullParser.nextText());

} else if (xmlPullParser.getName().equals("description")) {

info.setDescription(xmlPullParser.nextText());

} else if (xmlPullParser.getName().equals("apkurl")) {

info.setUrl(xmlPullParser.nextText());

}

break;

default:

break;

}

type = xmlPullParser.next();

}

return info;

}

}

HTTP请求:

public class UpdateInfoService {

private Context context;



public UpdateInfoService(Context context) {

this.context = context;

}



public UpdateInfo getUpdateInfo(int urlId) throws Exception {

String path = context.getResources().getString(urlId);// 拿到config.xml里面存放的地址

URL url = new URL(path);

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 开启一个http链接

httpURLConnection.setConnectTimeout(5000);// 设置链接的超时时间,如今为5秒

httpURLConnection.setRequestMethod("GET");// 设置请求的方式

InputStream is = httpURLConnection.getInputStream();// 拿到一个输入流。里面包涵了update.xml的信息

return UpdateInfoParser.getUpdateInfo(is);// 解析xml

}

}

然后就能够依据与获取到的数据相比較而且下载更新了。

其它的做法和这个类似,只是此种方式比較简单一些,也是最频繁的使用方式。

个人辛勤劳动成果。如有转载,请注明出处,谢谢!

Android开发之应用程序更新实现的更多相关文章

  1. android 开发中 sdk 无法更新

    现在用到android 的多个版本适配 , 换了个新环境 , 重新配置了android 的开发环境,哪想到遇到了很多小问题.  今天又遇到了 android sdk manager 无法更新的问题.  ...

  2. [android] 手机卫士应用程序更新和签名

    弹出升级对话框 获取AlertDialog.Builder对象,通过new出来 调用Builder对象的setTitle()方法,参数:文本 调用Builder对象的setMessage()方法,参数 ...

  3. Android开发eclipse运行程序时报timeout的解决方法

    eclipse开发Android程序时,忽然莫名其妙报这个错,之前还好好的.忽然就不行了. Failed to install xxx.apk on device~~~: timeout 尝试过手机里 ...

  4. Android开发之应用程序窗体显示状态操作(requestWindowFeature()的应用)

    转自:http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html 我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其 ...

  5. 写给 Android 开发的小程序布局指南,Flex 布局!

    一.序 Hi,大家好,我是承香墨影! 最近在做小程序,验证一些方向,开发效率确实很快,就是各种微信的审核有点费劲,但是总归是有办法解决的. 想要开发一款小程序,其实和我们正常写一款 App 类似,你需 ...

  6. Android开发——实现子线程更新UI

    Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用子线程来执行 ...

  7. Android开发之应用程序的安装

    这里介绍的是用XUtils下载apk文件,然后进行安装. 首先用HttpUtils下载文件(记得获取SD卡的读写权限和联网的权限): /** * 下载Apk */ private void downL ...

  8. 【Android开发笔记】程序崩溃异常总结

    广播注册相关(broadcastReceiver) 没有注册广播就注销广播 注册广播但未注销广播 注册广播后重复注销广播 解决办法: 添加一个布尔变量,注册广播后为true,若为true在执行注销,注 ...

  9. 在windows下用cygwin和eclipse搭建cocos2dx的android开发环境

    在windows下用cygwin和eclipse搭建cocos2dx(2.1.4)的android开发环境,2013-8-1更新. 一.准备工作 需要下载和安装以下内容,请根据自己的操作系统选择x86 ...

随机推荐

  1. curator管理es索引

    安装curator------------------rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch vi /etc/yu ...

  2. UTF-8 与 BIG-5 转码

    BIG-5 轉 UTF-8 若要將一個文字檔從 BIG-5 編碼轉換為 UTF-8 編碼,可以執行: iconv -f BIG-5 -t UTF-8 big5.txt > utf8.txt 其中 ...

  3. android 内存泄漏检测工具 LeakCanary 泄漏金丝雀

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 内存泄漏检测工具 android 内存泄漏检测工具 ======== 内存泄漏 就是  无用的对 ...

  4. 初见Python<1>:基础语法

    1.两个整数相除,计算结果的小数部分被截除,结果仍然是一个整数: 如:1/2=0 2.整数和浮点数相除.或者浮点数之间相除,结果有小数部分,仍然是一个浮点数: 如:1/2.0=0.5  1.0/2=0 ...

  5. luogu P1979 华容道

    solution 被假hash可了半天....sadQAQ code // luogu-judger-enable-o2 #include<queue> #include<cstdi ...

  6. JZYZOJ1390【noi2001】炮兵阵地 状压DP

    http://172.20.6.3/Problem_Show.asp?id=1390 需要储存该行和上一行两个状态.通过观察规则可以发现条件允许的状态很少(相邻两个至少空两格),据此可以减少状态数量, ...

  7. RestFramework

    什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审 ...

  8. PHP与mysql数据库

    1.PHP访问数据库的一般步骤 连接MySQL服务器 选择MySQL数据库 执行SQL语句(增,删,改,查) 关闭结果集,释放资源 关闭MySQL服务器的连接 需要查的表的数据: 2.连接和关闭实例 ...

  9. Codeforces Gym 100269K Kids in a Friendly Class 构造题

    Kids in a Friendly Class 题目连接: http://codeforces.com/gym/100269/attachments Description Kevin resemb ...

  10. Linux关于终端的基本概念汇总(tty/pty)(转)

    在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种: 1.串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口 ...