使用七牛云存储实现Android的自动更新
为了修复Bug或更新软件,我们通常需要实现自动更新,没有哪一个牛逼的人能够搞到每一个用户的机子去帮他们更新。
1、自动更新的流程
我们将了解一下自动更新的思路。既然软件要自动更新,那么它必须知道自己是不是最新版本,那么我们就需要在某一个地方放跟版本和更新有关的信息,一般来讲,我们会在自己的网站上放一个记录版本信息的XML文本,还有我们的软件。当我们获取了版本信息,假设这时候需要更新,那么我们的软件会自动向服务器下载最新版本,然后用最新版本将老版本替换掉。具体的流程如下图所示
2、利用云存储空间实现自动更新
照着上面讲的流程,我们将慢慢实现:
编写版本信息文件
上传文件到云存储空间
使用相关的代码来实现
2.1现在我们来编写所需要的版本信息文件。后面,我们软件里面主要通过读取版本信息,来判断是否要更新,要更新的时候从这个文件中获取新版软件下载地址。我写了一个示例的,如下图。
2.2七牛是一个云存储服务商,用七牛来演示主要是因为他提供了一些免费空间。七牛空间的申请和上传文件可以参考文档。上传完版本信息文件,记录一下他的下载地址,以便后面用来检测是否有新版本。
2.3 解析XML相关的代码
/**
* 从网络上获取XML
*
* @return XML输入流
* @throws IOException
* 网络文件不存在
*/
private InputStream getVersionFromNetwork() throws IOException {
// 确定请求服务器的地址
// 注意在Android模拟器中访问本机服务器时不可以使用localhost与127字段
// 因为模拟器本身是使用localhost绑定
String path = "
http://换成你自己的空间名.u.qiniudn.com/version.xml
";
// 建立一个URL对象
URL url = new URL(path);
// 得到打开的链接对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求超时与请求方式
conn.setReadTimeout(5 * 1000);
conn.setRequestMethod("GET");
// 从链接中获取一个输入流对象
InputStream inStream = conn.getInputStream();
return inStream;
}
2.4 更新有关的样例和代码请参考http://www.cnblogs.com/coolszy/archive/2012/04/27/2474279.html,这篇博文已经讲的很好了。
3、进一步的考虑。
3.1 有时候我们会需要显示软件更新的信息,这时候我们可以在刚刚编写的version.xml文件中写上软件的更新说明,然后将它显示到更新的提示框中。
我再解释一下跟解析版本信息有关的代码吧。
package com.example.utils.android;//这是我的命名空间,你应该换成自己的 import java.io.InputStream;
import java.util.HashMap; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; public class ParXmlService {
public HashMap<String, String> parseXml(InputStream inStream)
throws Exception {
HashMap<String, String> hashMap = new HashMap<String, String>();
// 创建DocumentBuilderFactory,该对象将创建DocumentBuilder。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建DocumentBuilder,DocumentBuilder将实际进行解析以创建Document对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析该文件以创建Document对象
Document document = builder.parse(inStream);
// 获取XML文件根节点
Element root = document.getDocumentElement();
// 获得所有子节点
NodeList childNodes = root.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node childNode = (Node) childNodes.item(i);
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) childNode;
// 版本号
if ("version".equals(childElement.getNodeName())) {
hashMap.put("version", childElement.getFirstChild()
.getNodeValue());
// 软件名称
} else if ("name".equals(childElement.getNodeName())) {
hashMap.put("name", childElement.getFirstChild()
.getNodeValue());
// 下载地址
} else if ("url".equals(childElement.getNodeName())) {
hashMap.put("url", childElement.getFirstChild()
.getNodeValue());
} else if (("displayMessage".equals(childElement.getNodeName())))// 更新描述
{
hashMap.put("displayMessage", childElement.getFirstChild()
.getNodeValue());
}
} }
return hashMap;
}
}
3.2 有时候我们会需要针对不同的版本
就像微软会为WinXP,Win2003,Win7发布不同的补丁一样,有时候我们也需要为自己不同版本的软件发布补丁,因为并不是所有的软件都像新浪微博一样,只要用户齐刷刷地更新到最新版本就行了。
针对这一点,我的思路是:将之前的version.xml的命名方式改成以“版本名+版本号.xml”的命名方式,这样子,我们就可以根据版本名和版本号对应到指定的更新信息。
参考链接:http://www.cnblogs.com/coolszy/archive/2012/04/27/2474279.html
使用七牛云存储实现Android的自动更新的更多相关文章
- 七牛云存储 qiniu 域名 回收 文件上传 备份 下载 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)
两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存 ...
- 为七牛云存储开发的PHP PEAR 包:Services_Qiniu
七牛云存储Qiniu Resource (Cloud) Storage:用于存储图片.apk等静态资源. 优点: 1.使用七牛带宽和CDN,速度快,不占用开发者服务器. 2.支持图片任意格式.任意分辨 ...
- ueditor上传图片到七牛云存储(form api,java)
转:http://my.oschina.net/duoduo3369/blog/174655 ueditor上传图片到七牛云存储 ueditor结合七牛传图片 七牛的试炼 开发前的准备与注意事项说明 ...
- wordpress使用video.js与七牛云存储实现无广告视频分享应用
video.js是一款极受欢迎的基于HTML5的开源WEB视频播放器,其充分利用了HTML5的视频支持特性,可以实现全平台的无视频插件播放功能,对于现在流行的手机.PAD等移动智能终端有极佳的应用体验 ...
- 七牛云存储官方接口PHP版本
PHP SDKv6 此 SDK 适用于 PHP 5.1.0 及其以上版本.基于 七牛云存储官方API 构建.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上. ...
- .Net Core实现将文件上传到七牛云存储
功能:将图片上传到七牛云存储 准备工作 注册七牛账号,提交实名认证(基本上1天内内审核通过) 登录七牛后台->对象存储->新建空间 (基本概念:https://developer.qini ...
- C#实现七牛云存储
云存储,就是把本地的资源文件存放至网络上,可以公网访问.相当于网盘功能,感觉非常方便. 这里介绍的是七牛云存储.有兴趣的可以去官方网站详看 根据官网的介绍,本身是提供SDK的,下载地址,大家可以根据自 ...
- 利用七牛存储7天远程自动备份LINUX服务器
受服务器空间制约,我们不可能在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间.我们折中一下,采用星期命名,每次备份将覆盖上星期同一天的文件.从而只备份7份数据,不至于占用特别大的空间. 如 ...
随机推荐
- Changing SharePoint Default port ( 80 ) to another port ( 79 ).
Introduction In this How-To I will change my port from 80 to 79, probably because I want to host s ...
- SHELL脚本攻略(学习笔记)--2.5 tr
tr主要用于映射结果集.压缩和删除字符.我个人感觉特别有用,特别是压缩连续空格(空行)为一个空格(空行),让不规则的信息变得规则. 2.5.1 tr映射 tr [options] [SET1] [SE ...
- css3伸缩布局属性总结
http://www.css88.com/book/css/properties/flex/flex-basis.htm http://c7sky.com/dive-into-flexbox.html ...
- 基于tcp/udp的协议
使用TCP协议的常见端口主要有以下几种: (1) FTP:定义了文件传输协议,使用21端口.常说某某计算机开了FTP服务便是启动了文件传输服务.下载文件,上传主页,都要用到FTP服务. (2) Tel ...
- Raspberry Pi(树莓派)国内软件源
树莓派自带的软件源是 deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi 由于网站在国外 ...
- [DB]MariaDB 与 MySql 数据库
目前 MariaDB 已经出来几年了,本文编辑时的官网最新稳定版本是 10.1.14 链接:https://downloads.mariadb.org/ 但百度没有下载,搜狗给的下载版本是 5.5.2 ...
- 屏蔽input导致的回车提交事件
onkeypress="if(event.keyCode == 13) return false;"
- WPF 设置透明度和圆形图片
1 设置效果为
- mysql: symbol lookup error: /usr/local/lib/libreadline.so.6: undefined symbol: UP
Error Symptom: when you run $mysql -u root -p command in the linux you get an error message ” mysql: ...
- __slots__ 属性绑定
s = Student() # 创建新的实例 s.name = 'Michael' # 绑定属性'name' s.age = 25 # 绑定属性'age' s.score = 99 # 绑定属性'sc ...