我如何知道用户何时在我的 Flex 应用程序上闲置了 5 分钟?
当我说“空闲”时,我的意思是用户根本没有与应用程序交互。
谢谢!!
我如何知道用户何时在我的 Flex 应用程序上闲置了 5 分钟?
当我说“空闲”时,我的意思是用户根本没有与应用程序交互。
谢谢!!
另请参阅 中的idle
事件SystemManager
。这种方法适用于 AIR 或 Flash Player。
application.systemManager.addEventListener(FlexEvent.IDLE, onIdle);
您可以使用获得空闲时间(以不受支持的方式)
SystemManager.mx_internal::idleCounter
由于这是一个 AIR 应用程序,我可以在 NativeApplication 上监听 USER_IDLE 事件
//Set seconds for idle
this.nativeApplication.idleThreshold = 5;
//listen for user idle
this.nativeApplication.addEventListener(Event.USER_IDLE,lock);
创建一个计时器,您每次在应用程序级别捕获用户事件时都会重置该计时器。
如果计时器已经结束,那么您就知道用户已经闲置了设定的时间。
// 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();
}
您可以使用以下代码获取超时:
<?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>
@迈克尔布鲁尔戴维斯
systemManager.addEventListener(FlexEvent.IDLE, onIdle)
适用于鼠标事件。
键盘事件呢?systemManager
在收听键盘事件之前,您必须专注于某些元素。
部分解决方案:在applicationComplete
事件中,我添加了以下行
stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
现在键盘事件正在被监听。
缺点:只有在应用程序至少被点击一次后才能工作。然后工作正常
有什么方法可以让应用程序监听键盘事件而无需点击一次。一些建议添加stage.focus = this
. 也没有工作。(仍然需要点击)