Как я могу узнать, когда пользователь бездействует, скажем, 5 минут в моем приложении Flex?
Когда я говорю «бездействует», я имею в виду, что пользователь вообще не взаимодействовал с приложением.
Спасибо!!
Как я могу узнать, когда пользователь бездействует, скажем, 5 минут в моем приложении Flex?
Когда я говорю «бездействует», я имею в виду, что пользователь вообще не взаимодействовал с приложением.
Спасибо!!
См. Также событие idle
в SystemManager
. Этот подход работает для AIR или Flash Player.
application.systemManager.addEventListener(FlexEvent.IDLE, onIdle);
Вы можете получить время простоя (неподдерживаемым способом), используя
SystemManager.mx_internal::idleCounter
Поскольку это приложение AIR, я могу просто прослушивать событие USER_IDLE в NativeApplication.
//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
. Тоже не сработало. (Все равно нужен был клик)