Запуск приложения Air 2.0 в приложении Air 2.0 - PullRequest
1 голос
/ 01 сентября 2010

Я пытался запустить отдельное приложение Air через мое текущее приложение Air.

Оба приложения скомпилированы с использованием Adobe Air 2.0 SDK.

Методы, которые я нашел до сих пор, включают передачу идентификатора издателя в дополнение к идентификатору приложения, но я считаю, что идентификатор издателя стал избыточным после 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 (дескриптор приложения) в приложении, которое я пытаюсь загрузить, чтобы разрешить вызов браузера.

Номер версии дескриптора приложения моего приложения, которое я пытаюсь загрузить, - «V1», который versionDetectCallback, похоже, подхватывает. Если это так, я ожидал, что смогу запустить его, но это не так.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 02 сентября 2010

После поиска соответствующей документации я столкнулся с проблемой, состоящей в том, что мой метод

_air.launchApplication(appID,pubID);

нужно было вызывать из события, сгенерированного пользователем, такого как обработчик щелчка.

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

Также кажется, что идентификатор издателя не является обязательным атрибутом, и вместо него можно передать пустую строку.

РЕДАКТИРОВАТЬ: Добавлен пример ниже.

//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);
    }
}
0 голосов
/ 27 апреля 2017

Мне нужно было запускать различные настольные приложения AIR из одного настольного приложения «Dispatcher» 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, в котором есть папка META_INF / AIR;есть файл application.xml

  1. идентификатор приложения в теге "id"
  2. Не забудьте установить allowBrowserInvocation = true;по умолчанию установлено значение false.Если вы забудете, приложение, которое вы пытаетесь запустить, никогда не запустится.
0 голосов
/ 01 сентября 2010

Может быть, будет лучше, если второе приложение будет работать как простой Web SWF и включать его через SWFLoader?

Какова ваша цель второго приложения AIR?Почему бы не использовать просто SWF?

...