使用七牛云存储实现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

作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/p/3349149.html

时间: 2024-11-03 12:06:48

使用七牛云存储实现Android的自动更新的相关文章

七牛云存储-java+android 实现多张图片上传至七牛云上面???

问题描述 java+android 实现多张图片上传至七牛云上面??? 新手,刚入行,最近有个需求是要实现多张图片上传,上传至七牛云存储上面,查了一些,仅仅一些概念就理不清了,求能给个具体的实例,非常感谢... 解决方案 首先得到上传接口,剩下的就是遍历图片,一个个调用接口 解决方案二: 可以和七牛云的技术支持联系下,让他们派点工程师协助你们团队开发. 解决方案三: 多线程异步上传操作,很多第三方框架的... 解决方案四: 找七牛云技术支持,网上再找下很多多图片上传demo的 解决方案五: 额,

Android中使用七牛云存储进行图片上传下载的实例代码

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了. 可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端

七牛云存储的主要特点

  七牛云存储是由七牛提供的在线存储服务,通过云端接口向企业客户提供网上无限存储空间,和传统的云存储服务(如 Amazon S3)不同,七牛云存储还增加了上传下载传输加速以及富媒体云端处理特性. 七牛云存储支持绑定域名(需要备案域名),全网 CDN 加速(多数据中心+多加速节点,上传下载均加速).持续在线,可以无限扩展.用户只需按需付费,无硬件投资,并且还可以免费试用3个月. 七牛云存储的主要特点 云存储:可以存储静态文件,包含:图片,音视频,甚至是 CSS,JS,还可以存储其他文件和非结构化数

七牛云存储官方接口PHP版本

PHP SDKv6 此 SDK 适用于 PHP 5.1.0 及其以上版本.基于 七牛云存储官方API 构建.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上.无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈. SDK源码地址:https://github.com/qiniu/php-sdk/tags 应用接

Linux下七牛云存储qrsync命令行上传同步工具

VPS数据备份是一个重要的工作,之前在文章:使用七牛云存储自动备份VPS数据分享过使用七牛云存储提供的工具QRSBox来备份数据,这篇文章介绍下七牛的另一个工具qrsync,qrsync支持断点续上传,增量同步,它可将用户本地的某目录的文件同步到七牛云存储中,同步或上传几百GB甚至上TB的文件毫无鸭梨. 一.软件下载  代码如下 复制代码 mkdir qrsync              ### 创建qrsync目录 cd qrsync                 ### 进入qrsync

《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)

两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存储Excel云文件,既通过云方式读取.加载Excel文件.在本文,我们就大家关心的云存储进行实战操练---基于SpreadDesign源码基础.   系统必备: 本文选用的国内比较流行的七牛云存储. SpreadDesign.exe已经升级为最新的Spread Studio 8.35.20143.0内核 .N

C#实现七牛云存储

云存储,就是把本地的资源文件存放至网络上,可以公网访问.相当于网盘功能,感觉非常方便. 这里介绍的是七牛云存储.有兴趣的可以去官方网站详看 根据官网的介绍,本身是提供SDK的,下载地址,大家可以根据自己开发的应用程序,下载对应的SDK包.我下载的是C#版本,参考对应的API文档,会发现最新SDK源码和API文档不一致.是的,文档还没有及时更新 因此,我在这里重新封装一层,直接调用即可.代码如下   先定义若干属性(注册七牛用户时,由系统发放) public static string Acces

七牛云存储CEO许式伟:围绕数据服务可以展开无限想象

七牛云存储CEO许式伟在几年间接受的采访并不多,甚至在公开场合都很少看到他的身影,并不是不善言辞,而是他有着一个自己的小世界.敲开他办公室的门,有四五个技术人员正在进行封闭开发,你可以直观的感受到这和传统的CEO作风大相径庭,也可以理解他选择不抛头露面的原因是用更多的时间来潜心研究和完善产品. 想要了解许式伟还要先从创立七牛说起,七牛从云存储起家技术自然过硬,所以称得上是技术牛人.但七牛云存储CEO许式伟并没有把自定位为一个纯粹的技术人,从2000年开始许式伟成为了一个技术人员,在六年的技术生涯

七牛云存储新一代存储V2上线 价格同期下调67%

近日,国内专为开发者提供一站式数据管理服务的七牛云存储对外公布了一个令人振奋的消息.在经历了四大版本的迭代后,七牛将于6月9日正式上线其新一代存储V2.同时,七牛云存储还宣布,将同期下调其存储服务价格至此前的33%.   七牛云存储专注于为开发者提供数据安全托管,传输加速以及图片音视频处理等一站式服务,一直在存储技术领域处于领先地位,最早就在国内推出了全分布式存储架构,对数据实行多机房互备.针对互联网发展趋势下越来越多的用户产生内容,七牛云存储也首创推出了上传加速功能,这一点对于对上传速度要求很