`
zhanghan
  • 浏览: 191423 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

实现AIR应用自动更新的大致原理(冰山上的播客)

    博客分类:
  • Flex
阅读更多

实现AIR应用自动更新的大致原理,以下是类文件和调用示例:

package Neo
{
        import flash.display.*;
        import flash.filesystem.*;
        import flash.desktop.Updater;
        import flash.events.*;
        import flash.net.*;
        import flash.xml.*;
        import flash.text.TextField;
        import flash.utils.ByteArray;
        import flash.events.IOErrorEvent;

        public class AIRUpdater extends Sprite
        {
                public var version:String;
                public var updataURL:String;
               
                private var updataRequest:URLRequest;
                private var updataLoader=new URLLoader();
                private var newVersion:String;
                private var airURLString:String;
                private var urlReq:URLRequest;
                private var urlStream:URLStream;
                private var fileData:ByteArray;
                private var baseSprite:Sprite=new Sprite();
                private var tipText:TextField=new TextField();
                private var btYes:Sprite=new Sprite();
                private var btYesText:TextField=new TextField();
                private var btNo:Sprite=new Sprite();
                private var btNoText:TextField=new TextField();

                public function AIRUpdater():void
                {
                        baseSprite.graphics.beginFill(0×000000,0.5);
                        baseSprite.graphics.lineStyle(8,0×000000,0.1);
                        baseSprite.graphics.drawRoundRect(0,0,360,160,10);
                        baseSprite.graphics.endFill();
                        /*add base*/
                        tipText.width=300;
                        tipText.height=30;
                        tipText.x=tipText.y=30;
                        tipText.autoSize=”center”;
                        tipText.textColor=0xFFFFFF;
                        tipText.text=”You must update your AIR Application now,ok?”;
                        baseSprite.addChild(tipText);
                        /*add button*/
                        btYes.graphics.beginFill(0×000000,0.5);
                        btYes.graphics.lineStyle(1,0×000000,0.1);
                        btYes.graphics.drawRoundRect(0,0,36,20,10);
                        btYes.graphics.endFill();
                        btYesText.width=36;
                        btYesText.text=”Yes”;
                        btYesText.autoSize=”center”;
                        btYesText.textColor=0xFFFFFF;
                        btYes.addChild(btYesText);
                        btNo.graphics.beginFill(0×000000,0.5);
                        btNo.graphics.lineStyle(1,0×000000,0.1);
                        btNo.graphics.drawRoundRect(0,0,36,20,10);
                        btNo.graphics.endFill();
                        btNoText.width=36;
                        btNoText.text=”No”;
                        btNoText.autoSize=”center”;
                        btNoText.textColor=0xFFFFFF;
                        btNoText.selectable=btYesText.selectable=false;
                        btNo.addChild(btNoText);
                        btYes.x=100;
                        btYes.y=100;
                        btNo.x=210;
                        btNo.y=100;
                        btYes.buttonMode=btNo.buttonMode=true;
                        baseSprite.addChild(btYes);
                        baseSprite.addChild(btNo);
                }
                /*Function For Update Application*/
                public function updateMyApp():void
                {
                        updataRequest=new URLRequest(updataURL);
                        updataLoader.load(updataRequest);
                        updataLoader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
                        updataLoader.addEventListener(Event.COMPLETE,loaderCompleteHandler);
                }
                /*loaderCompleteHandler*/
                private function loaderCompleteHandler(event:Event):void
                {
                        try {
                                var result:XML=new XML(updataLoader.data);
                                if (version != result.version)
                                {
                                        newVersion=result.version;
                                        airURLString=result.lastpublic;
                                        trace(”马上更新到最新版吗?” + “有新的更新”);
                                        addChild(baseSprite);
                                        baseSprite.x=(stage.stageWidth-baseSprite.width)/2;
                                        baseSprite.y=(stage.stageHeight-baseSprite.height)/2;
                                        btYes.addEventListener(MouseEvent.CLICK,updateBtHandler);
                                        btNo.addEventListener(MouseEvent.CLICK,removeBtHandler);
                                }
                        } catch (e:TypeError) {
                                trace(”Updata Application Error:Could not parse the XML file.”);
                        }
                }
                /*errorHandler*/
                private function errorHandler(e:IOErrorEvent):void
                {
                        trace(”Updata Application Error:Had problem loading the XML File.”);
                }
                private function updateBtHandler(event:MouseEvent):void
                {
                        urlReq=new URLRequest(airURLString);
                        urlStream=new URLStream  ;
                        fileData=new ByteArray  ;
                        urlStream.addEventListener(Event.COMPLETE,loaded);
                        urlStream.load(urlReq);
                }
                private function removeBtHandler(event:MouseEvent):void
                {
                        removeChild(baseSprite);
                }
                private function loaded(event:Event):void
                {
                        urlStream.readBytes(fileData,0,urlStream.bytesAvailable);
                        writeAirFile();
                }
                private function writeAirFile():void
                {
                        var file:File=File.desktopDirectory.resolvePath(”lastPublish.air”);
                        var fileStream:FileStream=new FileStream  ;
                        fileStream.addEventListener(Event.CLOSE,fileClosed);
                        fileStream.openAsync(file,FileMode.WRITE);
                        fileStream.writeBytes(fileData,0,fileData.length);
                        fileStream.close();
                }
                private function fileClosed(event:Event):void
                {
                        trace(”The AIR file is written.”);
                        var updater:Updater=new Updater  ;
                        var airFile:File=File.desktopDirectory.resolvePath(”lastPublish.air”);
                        updater.update(airFile,newVersion);
                }
        }
}

调用示例:
import flash.display.*;
import flash.filesystem.*;
import flash.desktop.Updater;
import flash.events.*;
import flash.net.*;
import flash.xml.*;
import flash.utils.ByteArray;
import flash.events.IOErrorEvent;
import Neo.AIRUpdater;

var aupSample:AIRUpdater=new AIRUpdater();
aupSample.version=”alpha1″;
aupSample.updataURL=”http://localhost/testUpdate/version.xml”;
aupSample.updateMyApp();
addChild(aupSample);
用于判断版本的XML结构示意:
<?xml version=”1.0″ encoding=”utf-8″?>
<example>
<version>alpha2</version>
<lastpublic>http://localhost/testUpdate/main.air</lastpublic>
</example>
分享到:
评论

相关推荐

    flex AIR 工程自动更新测试

    Flex AIR工程自动更新测试涉及到的是Adobe Integrated Runtime (AIR)应用程序的升级机制,这对于保持软件的最新状态和提供无缝用户体验至关重要。在Flex开发中,我们利用Adobe AIR SDK来创建跨平台的桌面应用程序。...

    Flex4 Air 多窗口 自动更新

    Flex4和Adobe AIR是开发跨平台桌面应用的框架和技术,它们允许开发者利用ActionScript和Flash...如果你希望深入学习或应用这些技术,可以从了解Flex4和AIR的基础开始,然后逐步探索多窗口编程和自动更新的实现细节。

    NetBackup AIR(自动映像复制操作手册)

    NetBackup AIR(Automatic Image Replication)是Veritas NetBackup中的一项功能,用于在不同地理位置之间自动复制备份映像,以实现灾难恢复和业务连续性。本操作手册详细介绍了如何配置和执行NetBackup AIR,确保在...

    独立air应用程序打包的附件

    10. **用户界面和功能设计**: AIR应用可以利用ActionScript的强大功能创建丰富的交互式用户界面,同时实现复杂的功能逻辑。 以上是对“独立air应用程序打包的附件”这一主题的详细解释,涵盖了从开发、打包到部署的...

    AIR应用开发中文指南(BETA2).pdf

    综上所述,Adobe AIR应用开发涉及多个关键环节,从理解AIR概念、设置开发环境,到使用FlexBuilder或Flex SDK进行开发,再到最终的测试与发布,每一步都需要细致的操作和深入的理解。通过本指南的学习,开发者将能够...

    STM32+EC20和STM32+Air724UG开发板原理图和PCB.zip

    EC20和Air724UG是两种常见的4G/LTE模块,用于实现无线通信和数据传输。 EC20模块是由Quectel公司生产的,它支持多种网络制式,包括LTE-TDD/LTE-FDD/UMTS/HSPA+/GSM,提供高速的数据传输能力,适用于物联网设备的...

    使用HTML和AJAX开发AIR应用程序中文文档

    Adobe AIR(Adobe Integrated Runtime)是一种由Adobe Systems开发的跨平台运行环境,支持使用HTML、CSS、JavaScript以及Flex等技术开发的应用程序,能够在桌面操作系统上运行。此文档主要介绍如何使用HTML和AJAX来...

    AIR2.0调用应用程序

    首先,AIR 2.0引入了NativeProcess API,这是一个关键的更新,它允许AIR应用程序启动、监控和通信与本地操作系统上的原生进程。通过这个API,开发者可以创建一个AIR应用,该应用能够执行操作系统级别的命令,如打开...

    as flash AIR 天气预报 桌面应用程序

    标题中的“AS Flash AIR 天气预报桌面应用程序”是指使用Adobe Flash ActionScript(AS)语言开发的一款基于Adobe Integrated Runtime(AIR)平台的桌面应用。这款应用的主要功能是提供天气预报服务,用户可以在桌面...

    AIR应用开发中文指南.pdf

    - **使用 Flex AIR 组件**: Flex 提供了一系列专门设计用于 AIR 应用的组件,这些组件可以帮助开发者快速构建界面并实现复杂的功能。 - WindowedApplication 组件: 用于创建窗口化应用程序的基础组件。 - HTML ...

    构建Adobe AIR应用程序

    12. 更新AIR应用程序:了解如何更新已经发布到市场的应用程序也是开发者必须掌握的知识。这包括使用Adobe AIR的更新框架以及如何为应用程序提供自定义更新用户界面。 13. 本地化AIR应用程序:对于面向全球用户的...

    Go-Air☁️Go应用的实时重新加载

    `Air`的工作原理大致如下: 1. **监听文件系统**:`Air`会持续监控项目目录中的文件变动,一旦检测到源代码有修改,就会触发重新编译的流程。 2. **快速编译**:`Air`采用了高效的编译策略,确保在代码改动后能...

    PDA /wince 自动更新

    "PDA / wince 自动更新"这个主题涉及到的是如何在运行Windows CE操作系统的PDA设备上实现软件的自动更新机制。 一、WinCE系统更新基础 Windows CE与桌面版Windows系统不同,它是一个模块化的操作系统,可以根据设备...

    ipad air2 电路原理图.pdf

    从提供的文件信息来看,文档包含了大量的专业术语和组件描述,这表明它是一份关于iPad Air 2的电路原理图的详细文档。为了满足您对知识点的要求,我将根据标题、描述、标签以及提供的部分内容来详细解释其中的要点。...

    Adobe AIR * 设置移动应用程序属性

    12. **应用更新**:Adobe AIR支持自动更新机制,开发者可以配置应用检测并下载新版本,简化用户的升级流程。 13. **源码和工具**:博客中提到的“源码”可能是指提供了一些示例代码,帮助开发者理解如何设置这些...

    AIR应用开发中文指南

    - **编写代码**: 编写 ActionScript、HTML 或 JavaScript 代码来实现应用程序的功能。 - **测试程序**: 在 Flex Builder 内部或外部环境中测试程序。 - **打包程序**: 将应用程序打包成 AIR 安装包。 - **使用 ...

    AIR2.0 调用应用程序 exe bat jar com 修正

    AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正 ...

    iPad-AIR2维修原理图PCB位置图(PDF格式)

    《iPad AIR2维修原理图与PCB位置图详解》 在现代科技日新月异的今天,智能手机,尤其是苹果公司的iPad系列,已经成为人们日常生活和工作中不可或缺的设备。然而,随着设备使用时间的增长,难免会出现一些硬件问题,...

    AIR2.0 调用应用程序 实例 本机通讯 实例 样例 测试可行

    在本文中,我们将深入探讨Adobe Integrated Runtime(AIR)2.0中的一个重要功能——调用本地应用程序,以及如何通过实例和样例实现与本机的通信。AIR 2.0为开发者提供了一种强大的方式,允许Flex或ActionScript应用...

Global site tag (gtag.js) - Google Analytics