当前位置: 代码迷 >> Web前端 >> Flex web施用调用Flex AIR桌面应用
  详细解决方案

Flex web施用调用Flex AIR桌面应用

热度:412   发布时间:2012-10-30 16:13:36.0
Flex web应用调用Flex AIR桌面应用

目录

1、Flex web应用安装AIR应用

2、Flex web应用运行AIR应用

3、Flex web应用与AIR之间参数传递

内容

1、Flex web应用安装AIR应用

首先,编写简单可测试的AIR应用,通过Flex builder打包成AIR桌面应用(AIR运行环境提前安装),打包前记得在*-app.xml文件中增加<allowBrowserInvocation>true</allowBrowserInvocation>,表示允许通过浏览器启用,同时记下该配置文件中<id>TestAIR</id>(后面运行时使用)。

然后,编写as代码:

private var APP_URL : String = "http://localhost:8082/Test/TestAIR.air";???
private var AIR_VERSION : String = "1.0";

private function init():void
???{
????//加载air.swf文件,该文件中含有AIR安装启动的API
????var airSWFLoader:Loader = new Loader();?
????var loaderContext:LoaderContext = new LoaderContext();?
????loaderContext.applicationDomain = ApplicationDomain.currentDomain;
????
????airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
????airSWFLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

????//air.swf也可以设置为http://airdownload.adobe.com/air/browserapi/air.swf,主要是在企业应用中,很多时候不直接与外网相连,用户很不喜欢,因此我将此文件放在服务器上以供加载。
????airSWFLoader.load(new URLRequest("air.swf"),loaderContext);
????
????btn.addEventListener(MouseEvent.CLICK,installApp);
???}

private function onInit(e:Event):void?
???{
?????? air = e.target.content;
???}
private function onComplete(e:Event):void?
???{
?????? btn.enabled = true;
???}

private function installApp(evt:MouseEvent):void{
?????try {

??????? //安装AIR应用代码

????????air.installApplication(APP_URL, AIR_VERSION);
?????} catch (e:Error) {
?????Alert.show(e.message);
???? }
???}

完成上面这些,便可以成功通过Flex web应用安装AIR应用了。

2、Flex web应用运行AIR应用

在完成1的前提下,才能继续进行。

首先,准备两个数据,APP_ID(AIR应用id)与PUB_ID(发布商标识),来源分别为上面提到的<id>TestAIR</id>与刚刚安装好的AIR桌面应用,在其安装目录META-INF/AIR 下有一publisherid文件,文件内容即为PUB_ID。

然后,编写as代码,将上面installApp方法代码修改如下:

private var APP_ID : String = "TestAIR";
???
private var PUB_ID : String = "C74C4F07A4FF737805A7734349C14DA9017FB262.1";

private function installApp(evt:MouseEvent):void{
?????try {

????????air.launchApplication(APP_ID, PUB_ID,null);
?????} catch (e:Error) {
?????Alert.show(e.message);
???? }
???}

修改代码完成后,重新运行,不会再提示安装,可直接运行AIR应用。

3、Flex web应用与AIR之间参数传递

继1、2之后,修改installApp方法代码,此处为传递参数,代码如下:

private function installApp(evt:MouseEvent):void{
?????try {

??????? var arguments:Array = ["china"];//传递参数

????????air.launchApplication(APP_ID, PUB_ID,arguments);
?????} catch (e:Error) {
?????Alert.show(e.message);
???? }
???}

修改AIR应用代码,此处为接收参数,代码如下:

private function init():void {
????NativeApplication.nativeApplication.addEventListener(BrowserInvokeEvent.BROWSER_INVOKE, onInvokeEvent);
???}

private function onInvokeEvent(event:BrowserInvokeEvent):void{
????if(event.arguments.length > 0){
?????Alert.show(event.arguments[0]);
????}
???}

此处一定要监听BrowserInvokeEvent事件,只是InvokeEvent事件是不会接收到参数的。

重新打包AIR应用,运行便可见到参数传递、接收的效果。

?

1 楼 fejay 2011-07-19  
无法找到类 flash.events::NativeWindowBoundsEvent
总是报这个错,是怎么回事啊
2 楼 wenti 2011-07-22  
我这边不报错,但是并不能安装air,我怀疑installApplication那一步并没有成功,还有air.swf文件中到底有什么?能把那个文件中内容公布出来吗?
3 楼 wenti 2011-07-22  
不好意思,我找到api文档了,原来文档上有