检测在Mac AIR应用程序不同的退出选择(Detecting different quit opt

2019-08-02 17:35发布

我在Mac上运行的AIR应用程序,我想有隐藏的窗口,当有人“关闭”行为的应用程序(如点击红色的“X”按钮或CMD-W)。 但是,如果有人打CMD-Q或选择从坞上下文菜单或顶级菜单中的“退出”,我想应用到实际关闭。

我可以通过应用程序发送的“结束”事件的preventDefault,然而,这会导致所有“亲密”的方法,只是隐藏窗口。 有人在这一点上关闭应用程序的唯一方法是ForceQuit(或通过单独的接口I提供,喜欢上了停靠栏图标上下文菜单选项)。

我也曾尝试手动捕获CMD-Q keyDown事件,但它不会发送。 此外,这不会对帮助的情况下,当人们尝试使用菜单选项的退出程序。

此外,如果我的preventDefault就打烊方法,它使我的应用程序,立即取消关闭过程(这是一个可怕的用户体验)。

有没有一种方法来检测关闭AIR应用程序的不同的方法? 我希望能够告诉这些关闭方法之间的差异,反应到合适的。

Answer 1:

尝试一下本作收,从我的理解有/在框架bug,因此如果包括AIR更新它打破CMD-Q的支持,线程使用在这里: http://www.adobe.com /cfusion/webforums/forum/messageview.cfm?forumid=72&catid=670&threadid=1373568

这可能是也可能不是适用于您的情况。

NativeApplication.nativeApplication.addEventListener(Event.EXITING, 
        function(e:Event):void {
            var opened:Array = NativeApplication.nativeApplication.openedWindows;
            for (var i:int = 0; i < opened.length; i ++) {
                opened[i].close();
            }
    });


Answer 2:

试试这个,我相信一定有处理这更好的办法,但是这已经为我工作。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
    <mx:Script>
        <![CDATA[
            import mx.core.Application;
            import mx.events.AIREvent;
            import mx.core.Window;

            private function onCreationComplete():void {
                addMacSupport();
            }

            private var macsupport_allowExit:Boolean = false;

            private function addMacSupport():void {
                if ( Capabilities.os.indexOf("Mac") == 0 ) {
                    //open a hidden window that will prevent the application from
                    //exiting when the user presses Cmd+W
                    var win:Window = new Window();
                    win.visible = false;
                    win.open(false);

                    //add a closing listener on the hidden window, this event will only
                    //be fired when the user pressed Cmd+Q or selects quit from the menu
                    //then set macsupport_allowExit to true
                    win.addEventListener(Event.CLOSING, function(e:Event):void {
                        macsupport_allowExit = true;
                    });

                    //add an event listener to this window on closing
                    addEventListener(Event.CLOSING, function(e:Event):void {
                        //always preventDefault
                        e.preventDefault();

                        //wait one frame, then check the macsupport_allowExit variable
                        //if it is true, we nedd to exit the app, otherwise just hide
                        //the app window
                        callLater(function():void {
                            if ( macsupport_allowExit ) {
                                nativeApplication.exit();
                            }
                            else {
                                nativeWindow.visible = false;
                            }
                        });
                    });

                    //add an event listener for INVOKE to show our main app window
                    //when the dock icon is clicked.
                    addEventListener(InvokeEvent.INVOKE, function(e:InvokeEvent):void {
                        if ( nativeWindow && !nativeWindow.visible ) {
                            nativeWindow.visible = true;
                            nativeWindow.activate();
                        }
                    });
                }
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>


文章来源: Detecting different quit options in AIR application on Mac