首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Air应用程序-在系统托盘中启动?

Air应用程序-在系统托盘中启动?
EN

Stack Overflow用户
提问于 2011-09-03 00:17:54
回答 1查看 2.6K关注 0票数 2

如果有人能帮助我,或者给我指明正确的方向,我将不胜感激。

我一直在尝试在系统托盘中启动一个adobe air应用程序,到目前为止,我已经使用了这个代码片段:http://www.swamicharan.com/blog/air/minimizing-an-air-app-to-systemtray/,它的工作方式与所描述的一样,但是无论我做什么,似乎都不能让它在系统托盘中启动,最小化。这是我到目前为止所拥有的代码:

代码语言:javascript
复制
<?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>

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-03 06:18:46

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7286360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档