1

我如何知道用户何时在我的 Flex 应用程序上闲置了 5 分钟?

当我说“空闲”时,我的意思是用户根本没有与应用程序交互。

谢谢!!

4

5 回答 5

6

另请参阅 中的idle事件SystemManager。这种方法适用于 AIR 或 Flash Player。

application.systemManager.addEventListener(FlexEvent.IDLE, onIdle);

您可以使用获得空闲时间(以不受支持的方式)

SystemManager.mx_internal::idleCounter
于 2010-02-05T21:54:15.340 回答
5

由于这是一个 AIR 应用程序,我可以在 NativeApplication 上监听 USER_IDLE 事件

//Set seconds for idle
this.nativeApplication.idleThreshold = 5; 
//listen for user idle
this.nativeApplication.addEventListener(Event.USER_IDLE,lock); 
于 2010-02-05T16:29:48.117 回答
1

创建一个计时器,您每次在应用程序级别捕获用户事件时都会重置该计时器。

如果计时器已经结束,那么您就知道用户已经闲置了设定的时间。

// I am capturing only mouseMove and keyDown. That _should_ be enough to handle most user interactions.
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" mouseMove="onUserEvent" keyDown="onUserEvent">

...

private function onUserEvent(event:Event):void
{
    timer.reset();
}
于 2010-02-04T21:34:32.763 回答
1

您可以使用以下代码获取超时:

 <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               minWidth="955" minHeight="600"
               initialize="init(event)">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.core.mx_internal;
            import mx.events.FlexEvent;

            protected function init(event:FlexEvent):void
            {
                systemManager.addEventListener(FlexEvent.IDLE, handleApplicationIdle);
            }

            private function handleApplicationIdle(event:FlexEvent):void
            {
                if(event.currentTarget.mx_internal::idleCounter == 60){
                    Alert.show("Time out happened");
                }
            }
        ]]>
    </fx:Script>
</s:Application>
于 2012-01-12T07:18:49.507 回答
0

@迈克尔布鲁尔戴维斯

systemManager.addEventListener(FlexEvent.IDLE, onIdle) 适用于鼠标事件。

键盘事件呢?systemManager在收听键盘事件之前,您必须专注于某些元素。

部分解决方案:在applicationComplete事件中,我添加了以下行

   stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);

现在键盘事件正在被监听。

缺点:只有在应用程序至少被点击一次后才能工作。然后工作正常

有什么方法可以让应用程序监听键盘事件而无需点击一次。一些建议添加stage.focus = this. 也没有工作。(仍然需要点击)

于 2012-04-12T21:27:13.513 回答