用于AIR的自动更新程序,需要在服务器上部署用UPDate的XML文件,里面的内容只需版本号,注意的是,摆放在服务器的版本号必须和XML文件内的版本一致。
下面的是用于UPDate的类
1
package myClass2


{3
4
import flash.desktop.Updater;5
import flash.display.*;6
import flash.errors.IllegalOperationError;7
import flash.events.*;8
import flash.filesystem.*;9
import flash.net.*;10
import flash.text.TextField;11
import flash.text.TextFormat;12
import flash.utils.ByteArray;13
import flash.xml.*;14
15
import mx.controls.Alert;16
import mx.core.UIComponent;17
import mx.events.CloseEvent; 18
public class AIRUpdater extends UIComponent19

{20
public var version:String; 21
public var updataURL:String; 22
private var updataRequest:URLRequest; 23
private var updataLoader:URLLoader=new URLLoader(); 24
private var newVersion:String; 25
private var airURLString:String; 26
private var urlReq:URLRequest; 27
private var urlStream:URLStream; 28
private var fileData:ByteArray; 29
private var baseSprite:Sprite=new Sprite(); 30
private var tipText:TextField=new TextField(); 31
private var downText:TextField = new TextField(); 32
private var setfont:TextFormat = new TextFormat();33

34
public function AIRUpdater()35

{36
baseSprite.graphics.beginFill(0X666565,0.95); 37
baseSprite.graphics.lineStyle(2,0X333333,0); 38
baseSprite.graphics.drawRoundRect(0,0,363,167,10); 39
baseSprite.graphics.endFill(); 40
baseSprite.y = 1024;41

/**//*add base*/ 42
setfont.size = 20;43
setfont.bold = false;44
tipText.width=300; 45
tipText.height=30; 46
tipText.x=tipText.y=30; 47
tipText.autoSize="center"; 48
tipText.textColor=0xFFFF00; 49
tipText.text=" 正在下载新版本,请等候!\n\n Update Loading ! Please Wait !"; 50
tipText.setTextFormat(setfont);51
baseSprite.addChild(tipText); 52
downText.width = 50;53
downText.height = 30;54
downText.x = 160;55
downText.y = 110; 56
downText.textColor=0xFFFF00; 57
downText.text = "0%";58
downText.setTextFormat(setfont); 59
baseSprite.addChild(downText); 60
} 61
62

public function updateMyApp():void
{ 63
updataRequest=new URLRequest(updataURL); 64
updataLoader.load(updataRequest); 65
66
updataLoader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler); 67
updataLoader.addEventListener(Event.COMPLETE,loaderCompleteHandler); 68
} 69
70

public function loaderCompleteHandler(event:Event):void
{ 71
72

try
{ 73
var result:XML=new XML(updataLoader.data); 74

if (version != result.version)
{ 75
newVersion=result.version; 76
airURLString=result.lastpublic; 77
trace("马上更新到最新版吗?" + "有新的更新"); 78
79
addChild(baseSprite); 80
baseSprite.x=(stage.stageWidth-baseSprite.width)/2; 81
baseSprite.y=(stage.stageHeight-baseSprite.height)/2+ 55; 82
83
updateBtHandler(); 84
}85
else86

{87
//thirteen.instance.startPlay();88
} 89

} catch (e:TypeError)
{ 90
trace("Updata Application Error:Could not parse the XML file.");91
Alert.show("更新配置文件有誤,請重試","Update失敗",4,null,quit); 92
} 93
} 94
95

private function errorHandler(e:IOErrorEvent):void
{ 96
trace("Updata Application Error:Had problem loading the XML File.");97
Alert.show("網絡有誤,請重試","Update失敗",4,null,quit); 98
} 99
100

private function updateBtHandler():void
{ 101
urlReq=new URLRequest(airURLString); 102
urlStream=new URLStream(); 103
fileData=new ByteArray(); 104
urlStream.addEventListener(Event.COMPLETE,loaded); 105
urlStream.addEventListener(ProgressEvent.PROGRESS,onProgress); 106
urlStream.addEventListener(IOErrorEvent.IO_ERROR,eehandler); 107
urlStream.load(urlReq); 108
} 109
110

public function eehandler(eve:ErrorEvent):void
{111
Alert.show("找不到更新程序,請重試","Update失敗",4,null,quit);112

113
}114

115
private function onProgress(evt:ProgressEvent):void116

{117
var downNum:int = evt.bytesLoaded / evt.bytesTotal * 100;118
downText.text = downNum + "%";119
downText.setTextFormat(setfont); 120
}121
122

private function removeBtHandler(event:MouseEvent):void
{ 123
removeChild(baseSprite); 124
} 125
126

private function loaded(event:Event):void
{ 127
urlStream.readBytes(fileData,0,urlStream.bytesAvailable); 128
writeAirFile(); 129
} 130
131

private function writeAirFile():void
{ 132
var file:File=File.documentsDirectory.resolvePath("HKdaLaoEr.air"); 133
var fileStream:FileStream=new FileStream(); 134
fileStream.addEventListener(Event.CLOSE,fileClosed); 135
fileStream.openAsync(file,FileMode.WRITE); 136
fileStream.writeBytes(fileData,0,fileData.length); 137
fileStream.close(); 138
} 139
140

private function fileClosed(event:Event):void
{ 141
trace("The AIR file is written."); 142
var updater:Updater=new Updater(); 143

144
var airFile:File=File.documentsDirectory.resolvePath("thirteen.air"); 145

try
{146
updater.update(airFile,newVersion); 147

}catch(e:IllegalOperationError)
{148
trace(e);149
Alert.show("不能在調試環境下運行","Update失敗",4,null,quit);150
}151
} 152

private function quit(evt:CloseEvent):void
{153
this.stage.nativeWindow.close();//关闭154
}155

156
}157
}
private function checkUpdate():void{
var dalaoerUndate:AIRUpdater = new AIRUpdater();
dalaoerUndate.version = version;
dalaoerUndate.updataURL= XXXXXXXXXXXXXXX // update的XML文件的网络地址
dalaoerUndate.updateMyApp();
addChild(dalaoerUndate);
}
Update XML文件:
<?xml version="1.0" encoding="utf-8"?>
<daLaoEr>
<version>2.8</version>
<lastpublic>http://www.xxx/xxx.air</lastpublic>
</daLaoEr>
浙公网安备 33010602011771号