2009-08-17 9 views
2

私は2つの空気アプリケーションをデスクトップにインストールし、それらを実行し、タスクバーマネージャに2つの空気プロセスが表示されます。どのようにして、別の空気アプリケーションから1つの空気アプリケーションのメソッドを実行できますか?空気プロセスadtフレックス

+0

はその答えの助けあなたをしましたか? – Gabriel

答えて

3

LocalConnectionを使用してください。

1つのAIRアプリケーションで接続をホストし、他のAIRユーザーから接続できます。そこからメソッドを呼び出すことができます。

注意:LocalConnectionは少し複雑で奇妙なことがあります(たとえば、接続はグローバルで名前は重複できません)。上記の例ドクから

....

// Code in LocalConnectionSenderExample.as 
package { 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.net.LocalConnection; 
    import flash.text.TextField; 
    import flash.text.TextFieldType; 
    import flash.events.StatusEvent; 
    import flash.text.TextFieldAutoSize; 

    public class LocalConnectionSenderExample extends Sprite { 
     private var conn:LocalConnection; 

     // UI elements 
     private var messageLabel:TextField; 
     private var message:TextField; 
     private var sendBtn:Sprite; 

     public function LocalConnectionSenderExample() { 
      buildUI(); 
      sendBtn.addEventListener(MouseEvent.CLICK, sendMessage); 
      conn = new LocalConnection(); 
      conn.addEventListener(StatusEvent.STATUS, onStatus); 
     } 

     private function sendMessage(event:MouseEvent):void { 
      conn.send("myConnection", "lcHandler", message.text); 
     } 

     private function onStatus(event:StatusEvent):void { 
      switch (event.level) { 
       case "status": 
        trace("LocalConnection.send() succeeded"); 
        break; 
       case "error": 
        trace("LocalConnection.send() failed"); 
        break; 
      } 
     } 

     private function buildUI():void { 
      const hPadding:uint = 5; 
      // messageLabel 
      messageLabel = new TextField(); 
      messageLabel.x = 10; 
      messageLabel.y = 10; 
      messageLabel.text = "Text to send:"; 
      messageLabel.autoSize = TextFieldAutoSize.LEFT; 
      addChild(messageLabel); 

      // message 
      message = new TextField(); 
      message.x = messageLabel.x + messageLabel.width + hPadding; 
      message.y = 10; 
      message.width = 120; 
      message.height = 20; 
      message.background = true; 
      message.border = true; 
      message.type = TextFieldType.INPUT; 
      addChild(message); 

      // sendBtn 
      sendBtn = new Sprite(); 
      sendBtn.x = message.x + message.width + hPadding; 
      sendBtn.y = 10; 
      var sendLbl:TextField = new TextField(); 
      sendLbl.x = 1 + hPadding; 
      sendLbl.y = 1; 
      sendLbl.selectable = false; 
      sendLbl.autoSize = TextFieldAutoSize.LEFT; 
      sendLbl.text = "Send"; 
      sendBtn.addChild(sendLbl); 
      sendBtn.graphics.lineStyle(1); 
      sendBtn.graphics.beginFill(0xcccccc); 
      sendBtn.graphics.drawRoundRect(0, 0, 
(sendLbl.width + 2 + hPadding + hPadding), (sendLbl.height + 2), 5, 5); 
      sendBtn.graphics.endFill(); 
      addChild(sendBtn); 
     } 
    } 
} 


// Code in LocalConnectionReceiverExample.as 
package { 
    import flash.display.Sprite; 
    import flash.net.LocalConnection; 
    import flash.text.TextField; 

    public class LocalConnectionReceiverExample extends Sprite { 
     private var conn:LocalConnection; 
     private var output:TextField; 

     public function LocalConnectionReceiverExample()  { 
      buildUI(); 

      conn = new LocalConnection(); 
      conn.client = this; 
      try { 
       conn.connect("myConnection"); 
      } catch (error:ArgumentError) { 
       trace("Can't connect...the connection name is already 
being used by another SWF"); 
      } 
     } 

     public function lcHandler(msg:String):void { 
      output.appendText(msg + "\n"); 
     } 

     private function buildUI():void { 
      output = new TextField(); 
      output.background = true; 
      output.border = true; 
      output.wordWrap = true; 
      addChild(output); 
     } 
    } 
}