Air/Flex-Anwendung aus einer anderen Air/Flex-Anwendung heraus starten

Julian Maicher

Erfahrenes Mitglied
Hallo!

Ich möchte eine Air/Flex-Anwendung aus einer anderen Air/Flex-Anwendung heraus starten.
Dazu nutze ich die air.swf Browserapi, die unter anderem die launchApplication-Methode zur Verfügung stellt.
Weitere Informationen: http://help.adobe.com/de_DE/AIR/1.5...tml#WS5b3ccc516d4fbf351e63e3d118666ade46-7c88

Diese API ist zwar für die Verwendung aus einem Browser heraus gedacht, allerdings lässt sie sich auch in einer Anwendung laden und verwenden.

Die Methoden launchApplication und installApplication funktionieren. Die Methode getApplicationVersion funktioniert an sich auch.
Nur wenn ich getApplicationVersion mit den beiden anderen Methoden kombiniere, bekomme ich Probleme.

Ich möchte meine zweite Anwendung installieren und starten bzw. nur starten, wenn die Anwendung bereits installiert wurde.
Also überprüfe ich mit getApplicationVersion ob meine Anwendung bereits installiert wurde. Dieser Methode ist asynchron und ihr wird eine Callback-Funktion übergeben.
Aus dieser Callback-Funktion kann ich allerdings die Methoden launchApplication und installApplication nicht mehr verwenden.
Die Version der Anwendung, falls installiert, wird richtig erkannt. Leider bekomme ich auch keine Fehlermeldungen, es tut sich garnichts.

Ich könnte mir gut vorstellen, dass es daran liegt, dass getApplicationVersion asynchron arbeitet. Habt ihr irgendwelche Ideen, wie man das Problem lösen könnte?

Hier mein Quellcode:

Code:
private var airSWF:Object;
private var airSWFLoader:Loader = new Loader();
private var loaderContext:LoaderContext = new LoaderContext(); 

private var appID:String = "de.jmaicher.air.prototyp.target";
private var pubID:String = "D7D4210ABBE74AC0334651B75699215AB0B4AB0E.1";
private var appInstallURL:String = "http://localhost/prototyp_target.air"; 


/* init method */
private function init() : void {
	loaderContext.applicationDomain = ApplicationDomain.currentDomain;
	airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, initAirSWF);
	airSWFLoader.load(new URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf"), loaderContext);
}

                               
private function initAirSWF(e:Event):void 
{
    airSWF = e.target.content;
}


private function installCheck(version:String) { 
	if(version == null)
	{
		installApplication();
	}
	else
	{
		startApplication();
	}
}


private function btnRunApp_click(e:MouseEvent):void {
	airSWF.getApplicationVersion(appID, pubID, installCheck);
}


private function startApplication() : void {
	var args:Array = ["launchFromBrowser"];
	airSWF.launchApplication(appID, pubID, args);	
}


private function installApplication() : void {
	var runtimeVersion:String = "1.0"; 
	var args:Array = ["launchFromBrowser"];
	airSWF.installApplication(appInstallURL, runtimeVersion, args);	
}
 
Okay, ich denke ich weiß warum. Ich habe in der Dokumentation den folgenden kleiner, aber feinen Abschnitt übersehen.

Die Methode launchApplication() funktioniert nur, wenn sie in einer Ereignisprozedur für ein Benutzerereignis, zum Beispiel einen Mausklick, aufgerufen wurde.

Weiteres Problem: Wie komme ich in der gestarteten Anwendung an die übergebenen Parameter?
 
Zurück