更新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。

发表评论

电子邮件地址不会被公开。 必填项已用*标注