更新AIR应用程序

关于AIR应用程序的更新,推荐从浏览器中(使用无缝安装功能)安装或更新。不过,也可以使用Updater 类让安装的应用程序自行更新到新版本。使用Updater 类的update()方法,可以指向用户计算机上的 AIR 文件,并更新为该版本。

首先,将最新版的air文件及其描述文件放置在服务器上。示例文件如下:

<updates> 
    <update location="http://localhost/update/update.air" version="2.0"> 
</update>

然后加载描述文件并读取AIR应用程序的最新版本号,再与当前应用描述符中的版本号比较,如果不匹配则加载AIR应用程序最新版更新。如下代码:

import flash.desktop.*; 
import flash.filesystem.*; 
import flash.net.*; 
import flash.events.MouseEvent; 

checkForUpdate(); 
var updateURL:String; 
var updateVersion:String; 
var stream:URLStream; 
var fileData:ByteArray; 
var updateFile:File; 
updateButton.enabled=false; 
updateButton.addEventListener(MouseEvent.CLICK, startUpdate); 

function checkForUpdate():void { 
    var req:URLRequest=new URLRequest("http://localhost/update/update.xml"); 
    var loader:URLLoader = new URLLoader(); 
    loader.addEventListener( Event.COMPLETE, onXMLLoadComplete ); 
    loader.load(req); 
} 

function onXMLLoadComplete( event:Event ):void { 
    var loader:URLLoader=event.target as URLLoader; 
    var xmlData:XML=XML(loader.data); 
    updateVersion=xmlData.update[0].@version; 
    updateURL=xmlData.update[0].@location; 
    checkStatus(); 
} 

function checkStatus():void { 
    var appXML:XML=NativeApplication.nativeApplication.applicationDescriptor; 
    var air:Namespace=appXML.namespaceDeclarations()[0]; 
    var version:String=appXML.air::versionNumber; 
    if (version!=updateVersion) { 
        updateButton.enabled=true; 
    } 
} 

function startUpdate(event:MouseEvent):void { 
    var req:URLRequest=new URLRequest(updateURL); 
    stream = new URLStream(); 
    fileData = new ByteArray(); 
    stream.addEventListener( Event.COMPLETE, onDownloadComplete ); 
    stream.load( req ); 
} 

function onDownloadComplete( event:Event ):void { 
    stream.readBytes( fileData, 0, stream.bytesAvailable ); 
    updateFile=File.desktopDirectory.resolvePath("update.air"); 
    var fs:FileStream = new FileStream(); 
    fs.addEventListener( Event.CLOSE, performUpdate ); 
    fs.openAsync( updateFile, FileMode.WRITE ); 
    fs.writeBytes( fileData, 0, fileData.bytesAvailable ); 
    fs.close(); 
} 

function performUpdate( event:Event ):void { 
    var updater:Updater= new Updater(); 
    updater.update(updateFile, updateVersion); 
}

当然,运行时将检查在AIR文件中指定的应用程序ID和发布者ID是否与调用 update() 方法的应用程序的应用程序ID和发布者ID相匹配,不匹配肯定更新不成功。另外,可能还需要在Web服务器上设置air文件的mime类型:application/vnd.adobe.air-application-installer-package+zip。

发表评论