对于面对桌面的应用程序,没有自动更新功能是很郁闷的一个事情。自AIR1.5之后,开始有了API支持自动更新。在没有API支持之前,可以手动的间接地实现。不过,有了API支持后,自动更新已经变得很简单与方便。至少不需要自己去写组件。下边就描述下实现自动更新的步骤吧。
1.准备标识版本号,以及更新信息的XML文件。该文件放在你的服务器(虚拟空间)上。

<?xml version="1.0" encoding="utf-8"?>   
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">   
<versionNumber>1.0.1</versionNumber>  
<versionLabel>1.0.1</versionLabel> 
<url>http://localhost:8080/sketchpad/cnf/Sketchpad.air</url>  
<description>   
    <!--  <text xml:lang="en_US">AIR AutoUpdate</text> -->  
    <text xml:lang="zh_CN">  
        Version:1.0.1
        1.你更新的内容 ''''''
        2.你更新的内容 ''''''
        3.你更新的内容 ''''''   
    </text>  
</description>   
</update> 

2.准备被更新的AIR文件。该文件放在你的服务器(虚拟空间)上。确保被更新的AIR文件的版本号(下边将介绍AIR文件的版本号)与XML描述的版本号一致。
3.时刻关注着你的app.xml文件。在app.xml文件的30行左右,有一个版本号码的节点:versionNumber。这里的数据就是AIR文件的版本号。你服务器上所放的AIR文件的版本号必须得比被已经安装过的AIR程序的版本高。(具体这个高低比较,我没做比较。是数字的大小比,还是什么呢。我没试过。不过,FB里边的版本号是三位数字,已经够用了。版本号渐渐往上累计)。
4.写AIR自动更新的方法了。定义一个类,这个类就是用来判断和更新的。自动更新的API是ApplicationUpdaterUI,它位于:

import air.update.ApplicationUpdaterUI;

我们先new 一个ApplicationUpdaterUI。然后给它的updateURL赋值。updateURL属性就是定义自动更新版本号和更新内容的xml路径。然后给ApplicationUpdaterUI注册侦听器。最后初始化更新:appUpdater.initialize();

在这一步。你可以定义哪些窗口想隐藏的。这里根据个人自己决定吧。我喜欢将检查更新面板隐藏掉。确定更新面板,更新进度,安装这些面板都显示出来。

初始化后,再执行启动更新过程。怎么知道初始化完成了呢。因为之前,就已经侦听了。在启动更新过程中,容易出现各种问题。各种问题的错误码,官方的资料中都有,等下将API连接贴在最后边。这里我遇到了一般人遇见不到的错误,错误码是:16828。因为我在系统托盘那,对关闭事件进行了侦听。当程序关闭时,我阻止了关闭。导致在更新的时候,程序退出不了。而使得报了16828错误。

package com.vini123.utils
{
    import flash.events.ErrorEvent;
    import air.update.ApplicationUpdaterUI;
    import air.update.events.UpdateEvent;
    
    public class AppUpdate
    {
        private var appUpdater:ApplicationUpdaterUI;
        public function AppUpdate()
        {
            Init();    
        }
        
        private function Init():void
        {
            appUpdater = new ApplicationUpdaterUI();
            appUpdater.updateURL = "update.xml";
            appUpdater.addEventListener(UpdateEvent.INITIALIZED,initializeHandler);
            appUpdater.addEventListener(ErrorEvent.ERROR,errorHandler); 
            appUpdater.initialize();
            
            appUpdater.isDownloadUpdateVisible = false; //“下载更新”对话框不可见  
            appUpdater.isCheckForUpdateVisible = false; //“检查更新”对话框不可见  
//            appUpdater.isFileUpdateVisible = false;//“文件更新”对话框不可见  
//            appUpdater.isDownloadProgressVisible = false;//“下载进度”对话框不可见  
//            appUpdater.isInstallUpdateVisible = false;//“安装更新”对话框不可见 
            
        }
        
        private function errorHandler(event:ErrorEvent):void 
        {   
    
        }   
        
        private function initializeHandler(e:UpdateEvent):void
        {   
            appUpdater.checkNow(); 
        }  
    }
}

5.等待更新完成。

官方API(更新过程错误码表也在里边):
http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/air/update/ApplicationUpdaterUI.html