Гибкий:обнаружение пользователя в режиме ожидания?

StackOverflow https://stackoverflow.com/questions/2203351

Вопрос

Как я могу определить, что пользователь бездействовал в моем приложении Flex в течение, скажем, 5 минут?

Когда я говорю «бездействие», я имею в виду, что пользователь вообще не взаимодействовал с приложением.

Спасибо!!

Это было полезно?

Решение

См. также 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 я добавил ниже Line Stage.AddeventListener (keyboardevent.key_down, handekeydown);Теперь события клавиатуры прослушиваются.

Недостаток: Работает только после того, как приложение нажато хотя бы один раз.Потом после работает нормально

Есть ли способ заставить приложение прослушивать события клавиатуры без необходимости однократного нажатия.Некоторые предлагали добавить «stage.focus = this».Тоже не получилось.(все равно клик нужен был)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top