Air Application - запуск в системном трее? - PullRequest
2 голосов
/ 02 сентября 2011

Я был бы чрезвычайно признателен, если бы кто-нибудь мог мне помочь или указать мне правильное направление.

Я пытался запустить приложение 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 Ответ

1 голос
/ 03 сентября 2011

Я думаю, вы справитесь, позвонив dock() в конце readyToTray(event:Event). Чтобы убедиться, что ваше initialWindow невидимо при запуске, вы можете установить его свойство visible в значение false в файле дескриптора приложения .

...