在Air 2.0应用程序中启动Air 2.0应用程序

时间:2010-09-01 14:32:20

标签: flex air

我一直试图通过目前的空气应用程序启动单独的空气应用程序。

这两个应用程序都是使用Adobe Air 2.0 SDK编译的。

到目前为止,我发现的方法除了应用程序ID之外还涉及传递发布者ID,但我相信发布者ID在Air 1.5.3之后变得多余了?

以下是我当前的实施,似乎正确地确定了Air Application的版本号,但是当我尝试启动它时,似乎没有任何事情发生。

private static var _air:Object;
private static var _loader:Loader;

private static var appID:String = "someOtherAirApplication";
private static var pubID:String = NativeApplication.nativeApplication.publisherID;  

public static function loadAir() : void
{
 _loader = new Loader();
 var loaderContext:LoaderContext = new LoaderContext();
 loaderContext.applicationDomain = ApplicationDomain.currentDomain;
 _loader.contentLoaderInfo.addEventListener(Event.INIT,onInit);
 _loader.load(new   URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf"),loaderContext);
}

private static function onInit(event:Event) : void
{
 _air = event.target.content;
        //the pubID argument resolves to and empty string ""   
        _air.getApplicationVersion(appID, pubID, versionDetectCallback);
}

private static function versionDetectCallback(version:String) : void
{
if(version != null)
{
_air.launchApplication(appID,pubID);
}
}

我在我尝试加载的应用程序上更改了app-config.xml(app描述符)以允许浏览器调用。

我试图加载的应用程序的应用程序描述符的版本号是“V1”,而versionDetectCallback似乎正在拾取。如果是这种情况,我希望能够启动它,但事实并非如此。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

在找到适当的文档后,我面临的问题似乎是我的方法

_air.launchApplication(appID,pubID);
需要从用户生成的事件(例如单击处理程序)调用

http://livedocs.adobe.com/flex/3/html/help.html?content=distributing_apps_1.html

此外,发布商ID似乎不是必需属性,而是可以传递空字符串。

编辑:添加了以下示例。

//This method is called from a user initiated event, in this case a mouse click on a button
private static function versionDetectCallback(event:MouseEvent,version:String) : void
{
    if(version != null)
    {
       _air.launchApplication(appID,pubID);
    }
}

答案 1 :(得分:0)

将第二个应用程序作为简单的Web SWF工作并通过SWFLoader包含它可能会更好吗?

第二次AIR应用程序的目标是什么?为什么不使用swf?

答案 2 :(得分:0)

我需要从单个“Dispatcher”AIR桌面应用程序启动不同的AIR桌面应用程序,我很难理解如何执行此操作。尝试不同的解决方案不起作用。最后我发现了不同的方法 更简单的方法是使用adobe.utils.ProductManager,它在Windows上进行了测试。

以下是代码:

import adobe.utils.ProductManager;
private var pm:ProductManager = new ProductManager("airappinstaller");

private function launchMyApplication(myApplicationID:String):void
    {
        pm.launch("-launch " + myApplicationID);
    }

关于MyApplication: 它是Flex AIR Application,它有一个文件夹META_INF / AIR;有一个文件 application.xml中

  1. 应用程序ID在标记“id”
  2. 不要忘记设置allowBrowserInvocation = true;默认值为false。如果您忘了,您尝试启动的应用程序将永远不会启动。