Flex:检测用户空闲?

axzmvihb  于 2022-10-08  发布在  Apache
关注(0)|答案(5)|浏览(149)

我怎么才能知道用户在我的Flex应用程序上闲置了5分钟?

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

谢谢!!

thtygnil

thtygnil1#

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

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

您可以使用以下命令获取空闲时间(以不受支持的方式)

SystemManager.mx_internal::idleCounter
e4yzc0pl

e4yzc0pl2#

因为这是一个AIR应用程序,所以我只能监听NativeApplication上的USER_IDLE事件

//Set seconds for idle
this.nativeApplication.idleThreshold = 5; 
//listen for user idle
this.nativeApplication.addEventListener(Event.USER_IDLE,lock);
wlzqhblo

wlzqhblo3#

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

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

// 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();
}
piztneat

piztneat4#

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

<?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>
xeufq47z

xeufq47z5#

@迈克尔·布鲁尔-戴维斯

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

那么键盘事件呢?在systemManager侦听键盘事件之前,您必须将注意力集中在某些元素上。

部分解决方案:在applicationComplete事件上,我增加了下面这行

stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);

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

**缺点:**应用程序至少点击一次后才起作用。那之后工作就好了

有没有办法让应用程序监听键盘事件,而不需要点击一次。一些人建议增加stage.focus = this。也不起作用。(仍然需要点击)

相关问题