AIR应用更新

准备工作:update.xml,xxx.air两个文件存放在服务器update目录下

update.xml

<update xmlns="http://ns.adobe.com/air/framework/update/description/2.5">
<versionNumber>0.0.1</versionNumber>
<url>http://localhost:8080/update/xxx.air</url>
<description/>
</update>

检查更新

     //读取配置文件
        public function ReadConfig():void
        {
            //获取该版本号
            appUpdater=new ApplicationUpdater();
            Global.getInstance().currentVersion = appUpdater.currentVersion;
var urlLoad:URLLoader=new URLLoader();
            urlLoad.load(new URLRequest("http://localhost:8080/update/update.xml"));
            urlLoad.addEventListener(HTTPStatusEvent.HTTP_STATUS,CheckFunction);

        }

        protected function CheckFunction(event:HTTPStatusEvent):void
        {
            if(event.status == 200)
            {
                checkVersion();
            }
            else
            {
                this.dispatchEvent(new Event(Event.COMPLETE));          //如果网络不通,就跳过更新
            }

        }

        //检查版本自动更新
        protected function checkVersion():void
        {
            beetleApp.startPage.Tips="正在检测版本更新……";
            NativeApplication.nativeApplication.addEventListener( Event.EXITING,
                function(e:Event):void {
                    var opened:Array = NativeApplication.nativeApplication.openedWindows;
                    for (var i:int = 0; i < opened.length; i ++) {
                        opened[i].close();
                    }
                });
            //区别就是是否有提示
            //appUpdater = new ApplicationUpdater();
            appUpdater.isNewerVersionFunction=isNewerVersionFunction;
            //appUpdater.configurationFile = configurationFile;
            //appUpdater.isCheckForUpdateVisible = false;
            appUpdater.updateURL = Constants.UPDATE_URL;
            appUpdater.addEventListener(UpdateEvent.INITIALIZED, updaterInitialized);
            appUpdater.addEventListener(StatusUpdateEvent.UPDATE_STATUS, statusUpdate);
            appUpdater.addEventListener(UpdateEvent.BEFORE_INSTALL, beforeInstall);
            appUpdater.addEventListener(StatusUpdateErrorEvent.UPDATE_ERROR, statusUpdateError);
            appUpdater.addEventListener(UpdateEvent.DOWNLOAD_START, downloadStarted);
            appUpdater.addEventListener(ProgressEvent.PROGRESS, downloadProgress);
            appUpdater.addEventListener(UpdateEvent.DOWNLOAD_COMPLETE, downloadComplete);
            appUpdater.addEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, downloadError);
            appUpdater.addEventListener(ErrorEvent.ERROR, updaterError);
            appUpdater.initialize();

        }

        private var appVersion:String;
        private var baseURL:String;
        private var upateVersion:String;
        private var description:String;
        private var isFirstRun:String;
        private var applicationName:String;
        private var installedVersion:String;

        private function updaterInitialized(event:UpdateEvent):void
        {
            this.isFirstRun = event.target.isFirstRun;
            this.applicationName = getApplicationName();
            this.installedVersion = getApplicationVersion();
            appUpdater.checkNow();
        }

        private function getApplicationVersion():String
        {
            var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor;
            var ns:Namespace = appXML.namespace();
            return appXML.ns::version;
        }

        /**
         * Getter method to get the name of the application, this does not support multi-language.
         * Based on a method from Adobes ApplicationUpdaterDialogs.mxml, which is part of Adobes AIR Updater Framework
         * Also based on Jens Krause blog post: http://www.websector.de/blog/2009/09/09/custom-applicationupdaterui-for-using-air-updater-framework-in-flex-4/
         *
         * @return String name of application
         *
         */
        private function getApplicationName():String
        {
            var applicationName:String;
            var xmlNS:Namespace=new Namespace("http://www.w3.org/XML/1998/namespace");
            var appXML:XML=NativeApplication.nativeApplication.applicationDescriptor;
            var ns:Namespace=appXML.namespace();

            // filename is mandatory
            var elem:XMLList=appXML.ns::filename;

            // use name is if it exists in the application descriptor
            if ((appXML.ns::name).length() != 0)
            {
                elem=appXML.ns::name;
            }

            // See if element contains simple content
            if (elem.hasSimpleContent())
            {
                applicationName=elem.toString();
            }

            return applicationName;
        }

        private function statusUpdate(event:StatusUpdateEvent):void
        {
            // stop the event from triggering the update download/install by itself
            trace(event.toString());
            event.preventDefault();
            if (event.available) {
                var alertInfo:String="发现新版本(" + event.version + ") ,是否立即升级?";
                var alertTitle:String="升级提示";
                var alertFlag:uint=Alert.OK|Alert.CANCEL;

                Alert.okLabel = "是";
                Alert.cancelLabel = "下次再说";
                Alert.show(alertInfo,alertTitle,alertFlag,this,updateChoiceAlertHandler);
            }else
            {
                this.dispatchEvent(new Event(Event.COMPLETE));
            }
        }

        private function updateChoiceAlertHandler(event:CloseEvent) : void {
            trace("updateChoiceAlertHandler: "+event.toString());
            if (event.detail == Alert.OK) {
                appUpdater.downloadUpdate();
                trace("Alert.OK");
            }else{
                appUpdater.cancelUpdate();
                this.dispatchEvent(new Event(Event.COMPLETE));
                trace("Alert.cancel");
            }
        }

        private function beforeInstall(event:UpdateEvent):void
        {
            trace(event);
        }

        private function statusUpdateError(event:StatusUpdateErrorEvent):void
        {
            event.preventDefault();
        }

        private function downloadStarted(event:UpdateEvent):void
        {
            trace(event);
        }

        private function downloadProgress(event:ProgressEvent):void
        {
            var num:int = (event.bytesLoaded/event.bytesTotal)*100;
            trace("已更新软件 "+num+"%");
        }

        private function downloadComplete(event:UpdateEvent):void
        {
            event.preventDefault(); // prevent default install
        }

        private function downloadError(event:DownloadErrorEvent):void
        {
            event.preventDefault();
           trace(event.text);
        }

        private function updaterError(event:ErrorEvent):void
        {
            trace(event.text);
        }

        protected function isNewerVersionFunction(currentVersion:String, updateVersion:String):Boolean
        {
            var local_vers:Array = currentVersion.split(‘.‘);
            var remote_vers:Array = updateVersion.split(‘.‘);
            var local_ver:int;
            var remote_ver:int;
            var local_points:Number = 0;
            var remote_points:Number = 0;

            for (var i:int=0; i<Math.max(local_vers.length, remote_vers.length); i++)
            {
                local_ver = local_vers.length <= i ? 0 : int(local_vers[i]);
                remote_ver = remote_vers.length <= i ? 0 : int(remote_vers[i]);
                local_points = local_points * 100 + local_ver;
                remote_points = remote_points * 100 + remote_ver;
            }
            return remote_points > local_points;
        }
时间: 2024-10-12 03:38:33

AIR应用更新的相关文章

ios开发-环境搭建

一.装XCode mac air 先更新到最新版mac系统 macOS Sierra 10.12.5 appStore 下载XCode Version 8.3.2 漫长等待... 二.建HelloWord 打开XCode,选择File->New Project,然后选择iOS->Application->Single View Application,然后点Next 填写应用信息 Product Name:项目名称: Organization Name:组织名,一般显示计算机名: Com

swf version 与flash player 对应关系

2013-04-16更新:更新Flash Player 11.7/AIR 3.7正式版. 详细链接FlashPlayer 11.7详情 2013-03-10更新:更新Flash Player 11.6/AIR 3.6正式版以及beta 11.7. 详细链接FlashPlayer 11.6详情 2012-11-07更新:更新Flash Player 11.5/AIR 3.5正式版发布日期. 2012-10-10更新:加入Flash Player 11.5/AIR 3.5的对应关系:加入发布日期列:

在 iOS 上通过 802.11k、802.11r 和 802.11v 实现 Wi-Fi 网络漫游

原文: https://support.apple.com/zh-cn/HT202628 了解 iOS 如何使用 Wi-Fi 网络标准提升客户端漫游性能. iOS 支持在企业级 Wi-Fi 网络上对客户端漫游进行优化.802.11 工作组标准 k.r 和 v 可让客户端在同一网络内更加顺畅地从一个接入点 (AP) 漫游到另一个接入点. 802.11k 通过创建优化的频道列表,802.11k 标准有助于 iOS 加快搜索附近可作为漫游目标的接入点.如果当前接入点的信号强度变弱,您的设备将进行扫描来

微端 打包更新工具 as air 分享

分享 微端,更新的是散包,不像端游,一个大包搞定! 更新需要每次用工具把资源的散文件,根据目录结构及时间 生成一个列表, 每次更新就是 目录及时间的比对! 该工程可以翻译成 其他语言,有兴趣的同学,可以尝试! 下载地址: http://download.csdn.net/detail/stonechang/7572325 微端 打包更新工具 as air 分享

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

Adobe AIR技术,这个需求可以实现不?

============问题描述============ Adobe AIR开发Android程序.其中一条需求是,因为有些模块的更新可能会比较频繁,要求每次更新这些模块时不用重新安装APK.于是方案定为:将这类模块(独立的swf文件)放在服务器端,每当发现有新版本时AIR将swf文件下载保存在本机备用. 但技术员反馈说,该方案无法实现,他说有权限的问题.将服务器上的swf下载保存到本机后,这些模块不能访问网络资源,里面的网络功能会失效.他说无法改变这些文件的权限. 请问他的说法成立吗?是否所有

MySQL 更新语句技巧

一. 多表更新 1. 数据准备 mysql> mysql> select goods_id, goods_name,goods_cate from tdb_goods; +----------+---------------------------------------+---------------------+ | goods_id | goods_name | goods_cate | +----------+--------------------------------------

苹果MacBook Air安装win7

同事的一台mba,说iOS不习惯,希望装一个win7系统.机器看上去很小巧精致,运行iOS速度飞快.试着点了下鼠标,没反应,翻过来看了下,有个电源开关.拨了一下,细小的指示灯闪了闪,应该加上电了.唉,咋还不能动呢,难道要装驱动?想想也不太可能啊,这么高大上的一个产品会让客户一上来就装驱动?试着按了按上面的按钮,鼓捣了一会才发现,原来使用前要按下左键,然后才能使用,out了. 既然同事要装win7那就装吧,只是这玩意上装系统还从未搞过,熟悉的那一套看来指望不上,只能百度了.结果基本上都是在iOS用

air 4.0+,Ane打包注意事项【适用Android】

[适合阅读]适用于air sdk 4.0之前,会打包Ane的同学们.如果您之前,没有经验,可以直接留言问题,我会依依解答. [本文目标]:air 4.0+ ,能很好的有效支持 R*文件机制.简言之,可以不用getResourceID()的方式引用资源,Android程序中,可以直接用 R.x.x引用资源. [安装] air sdk : http://helpx.adobe.com/air/kb/archived-air-sdk-version.html   (下载4.0+版本,包含4.0) 如果