2011-09-02 1 views
2

누군가가 나를 도울 수 있거나 올바른 방향으로 나를 가리킬 수 있다면 매우 감사하게 생각합니다.공기 응용 - 시스템 트레이에서 시작 하시겠습니까?

나는 시스템 트레이에서 어도비 에어 애플리케이션을 시작하려고 노력 해왔다. 지금까지이 스 니펫을 사용했다. : http://www.swamicharan.com/blog/air/minimizing-an-air-app-to-systemtray/ 설명대로 작동하지만 아무리해도 시작할 수 없다. 시스템 트레이에서 최소화됩니다. 이것은 내가 지금까지 가지고있는 코드입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="300" height="100" creationComplete="initApp()" layout="horizontal"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.CloseEvent; 

      private var trayIcon:BitmapData; 

      public function initApp():void{ 
       loadTrayIcon(); 

       this.addEventListener(Event.CLOSING, minToTray); 
      } 

      public function loadTrayIcon():void{ 
       var loader:Loader = new Loader(); 
       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, readyToTray); 
       loader.load(new URLRequest("assets/icon.PNG")); 
      } 

      private function minToTray(event:Event):void{ 
       event.preventDefault(); 
       dock(); 
      } 

      public function readyToTray(event:Event):void{ 
       trayIcon = event.target.content.bitmapData; 

       var myMenu:NativeMenu = new NativeMenu(); 

       var openItem:NativeMenuItem = new NativeMenuItem("Options"); 
       var closeItem:NativeMenuItem = new NativeMenuItem("Close"); 

       openItem.addEventListener(Event.SELECT, unDock); 
       closeItem.addEventListener(Event.SELECT, closeApp); 

       myMenu.addItem(openItem); 
       myMenu.addItem(new NativeMenuItem("", true)); 
       myMenu.addItem(closeItem); 

       if(NativeApplication.supportsSystemTrayIcon){ 
        SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = "Notifier"; 

        SystemTrayIcon(NativeApplication.nativeApplication.icon). 
         addEventListener(MouseEvent.CLICK, unDock); 

        stage.nativeWindow.addEventListener(
         NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, winMinimized); 

        SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = myMenu; 
       } 
      } 

      private function winMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void{ 
       if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED){ 
        displayStateEvent.preventDefault(); 
        dock(); 
       } 
      } 

      public function dock():void{ 
       stage.nativeWindow.visible = false; 

       NativeApplication.nativeApplication.icon.bitmaps = [trayIcon]; 
      } 

      public function unDock(event:Event):void{ 
       stage.nativeWindow.visible = true; 
       stage.nativeWindow.orderToFront(); 

       NativeApplication.nativeApplication.icon.bitmaps = []; 
      } 

      private function closeApp(event:Event):void{ 
       stage.nativeWindow.close(); 
      } 
     ]]> 
    </fx:Script> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Style> 
     @namespace s "library://ns.adobe.com/flex/spark"; 
     s|WindowedApplication 
     { 

      skinClass:ClassReference("spark.skins.spark.SparkChromeWindowedApplicationSkin"); 
      background-color:#999999; 
      background-alpha:"0.7"; 
     }   
    </fx:Style> 

    <s:Label text="Hello AIR"/> 
</mx:WindowedApplication> 

많은 감사.

답변

1

readyToTray(event:Event) 끝 부분에 dock()을 호출하여 관리 할 수 ​​있다고 생각합니다. initialWindow가 시작될 때 보이지 않도록하려면 application descriptor file에서 visible 속성을 false로 설정할 수 있습니다.

+0

굉장하고 완벽하게 작동합니다. – Sam0