2010-09-01 5 views
1

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

Оба приложения скомпилированы с использованием 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); 
} 
} 

Я изменил приложение-config.xml (приложение описатель) на приложения Я пытаюсь загрузить, чтобы браузер розарий.

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

Любые идеи?

ответ

1

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

_air.launchApplication(appID,pubID); 

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

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

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

EDIT: Добавлен пример ниже.

//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

, если это сработает для вас, не могли бы вы поделиться сценарием. Благодарю. и imho, если попытаться найти другой путь, будет интересно использовать файл system bash/bat-файл, чтобы запустить что-то внешнее тоже. – Eugene

0

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

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

+1

Второе приложение полностью не зависит от первого, но не будет конечного количества приложений. Идеальное решение позволит людям редактировать файл конфигурации, чтобы запускать свои собственные приложения из основного/первого приложения – James

0

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

  1. Application ID в теге «ID»
  2. Не забудьте установить allowBrowserInvocation = истина; значение по умолчанию - false. Если вы забудете, приложение, которое вы пытаетесь запустить, никогда не запустится.
Смежные вопросы