近期给项目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. android studio安卓工作室 工具栏

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha android studio安卓工作室 工具栏  都有什么 . 打开.保存全部.刷新.撤 ...

  2. 初见Python<2>:列表和元组

      1.在python中,最基本的数据结构是序列,序列中每一个元素被分配一个序号,即元素的位置,称为索引.索引从0开始,-1表示倒数第一个元素,-2表示倒数第二个元素,因此既可以是从前到后开始对元素进 ...

  3. luogu P1012 拼数

    题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4 ...

  4. HZAU 1201 Friends(树形DP)

    [题目链接] http://acm.hzau.edu.cn/problem.php?id=1201 [题目大意] 给出一棵树,问每个节点距离六个点以内的点有几个 [题解] 定根维护树形DP,Dw[x] ...

  5. 【后缀自动机】CDOJ1551 Hesty Str1ng

    可以发现,对于原串的每个长度>1的子串而言,将其除了最后一个字符之外反向接在其结尾,都是一个合法解.该解的长度一定是奇数. 对于原串的每个长度>2,且结尾两个字符相同的子串而言,将其除了最 ...

  6. bzoj 2665: [cqoi2012]编号

    题目中说任意两个数至少要有3个位上数不相同,那么其实也就是从7个数中选出5个这样任意的组合全部不同,用数组f[i][j][k][l][m][n]记一下就好了,i为第几种组合,一共C(7,5)种,最后爆 ...

  7. 源码安装python及paramikon的初步试用

    Auth: jin Date: 20140314 OS: CentOS release 5.5 (Final) 默认2.4版本 莫 1.download wget http://www.python. ...

  8. Android Activtity Security(转)

    Android四大组件之一--Activity安全详解. 原帖地址:http://drops.wooyun.org/tips/3936 0x00 科普 Android每一个Application都是由 ...

  9. 简单实现ToolStripMenuItem(菜单栏)的单选效果

    来源:http://www.97world.com/archives/2194 这几天在写又拍云的客户端,老实说确实学到了不少东西!接下来的几天我会把一些技巧或者原来没有接触过的一些东西发上来,算是复 ...

  10. 使用tcp.validnode_checking允许、限制机器访问数据库

         使用tcp.validnode_checking允许.限制机器访问数据库 在$OREACLE_HOME/network/admin下直接修改sqlnet.ora文件,增加如下内容: tcp. ...