2010-02-04 101 views
1

如何知道用户在我的Flex应用程序中闲置了5分钟?Flex:检测用户空闲?

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

谢谢!

回答

6

也看到了idle事件SystemManager。这种方法适用于AIR或Flash Player。

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

您可以通过下面的代码获得使用

SystemManager.mx_internal::idleCounter 
+0

感谢您的信息! – 2010-02-08 14:26:54

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(); 
} 
+0

谢谢,我有一个问题,如果这是一个AIR应用程序,它会捕获其他窗口的事件吗?谢谢! – 2010-02-05 14:10:05

+0

此外,每当用户与应用程序上的模式弹出窗口进行交互时,应用程序似乎不会接收事件?有没有修复? – 2010-02-05 14:43:38

5

作为,这是一个AIR应用程序,我可以监听USER_IDLE事件了NativeApplication

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

这是Adobe Air的正确答案 – automaticoo 2012-08-01 08:32:56

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> 
0

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

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

键盘事件怎么样。在systemManager侦听键盘事件之前,您必须关注某个元素。

部分解决: 在applicationComplete事件,我添加了下面线 stage.addEventListener(KeyboardEvent.KEY_DOWN,handleKeyDown); 现在键盘事件正在被侦听。

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

有没有什么办法让应用程序听键盘事件没有一次点击的麻烦。有人建议添加“stage.focus = this”。 (还需要点击)