【问题标题】:Air Application - Start in system tray?空中应用程序 - 在系统托盘中启动?
【发布时间】:2011-09-02 16:17:53
【问题描述】:

如果有人可以帮助我,或者指出我正确的方向,我将不胜感激。

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

非常感谢。

【问题讨论】:

    标签: apache-flex air system-tray


    【解决方案1】:

    我认为您可以通过在readyToTray(event:Event) 末尾调用dock() 来管理。 为确保您的 initialWindow 在启动时不可见,您可以在 application descriptor file 中将其 visible 属性设置为 false。

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多