Pregunta

¿Cómo puedo saber cuando un usuario ha estado inactivo durante 5 minutos por ejemplo en mi aplicación Flex?

Cuando digo "inactivo" Me refiero a que el usuario no ha interactuado con la aplicación en absoluto.

Gracias !!

¿Fue útil?

Solución

Véase también el caso en idle SystemManager . Este enfoque funciona para AIR o Flash Player.

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

Usted puede obtener el tiempo de inactividad (de una manera no soportada) utilizando

SystemManager.mx_internal::idleCounter

Otros consejos

Siendo que se trata de una aplicación AIR, sólo puede detectar el evento USER_IDLE en el NativeApplication

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

Crear un contador de tiempo que se restablece cada vez que se captura un evento de usuario a nivel de aplicación.

Si el temporizador ha terminado, entonces usted sabe que el usuario ha estado inactivo durante ese periodo de tiempo.

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

Usted puede obtener el tiempo de espera mediante el uso de código siguiente:

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

@ Michael Brewer-Davis

systemManager.addEventListener (FlexEvent.IDLE, OnIdle) funciona bien para eventos de ratón.

¿Qué hay de eventos de teclado. Hay que tener foco en algún elemento antes SystemManager escucha los eventos del teclado.

solución parcial : En caso applicationComplete, he añadido la línea de abajo    stage.addEventListener (KeyboardEvent.KEY_DOWN, HandleKeyDown); Ahora eventos de teclado están siendo escuchadas.

Desventaja: Sólo funciona tras la aplicación se hace clic en al menos una vez. Luego, después de los trabajos muy bien

¿Hay alguna manera de hacer que la aplicación escucha los eventos del teclado y sin molestia de clic una vez. Algunos sugirieron añadir "Stage.focus = esta". Tampoco funcionaba. (Fija Haga clic en que se necesitaba)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top