空气应用 - 从系统托盘开始?

时间:2011-09-02 16:17:54

标签: flex air system-tray

如果有人能帮助我,或者指出我正确的方向,我将非常感激。

我一直试图在系统托盘中启动adobe air应用程序,到目前为止我已经使用了这个片段: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 个答案:

答案 0 :(得分:1)

我认为您可以在dock()结束时致电readyToTray(event:Event)进行管理。 要确保您的initialWindow在启动时不可见,您可以在application descriptor file中将其visible属性设置为false。