Flex – Detectar inactividad usuario (FlexEvent.IDLE)

Gracias al evento FlexEvent.IDLE podemos saber el tiempo de inactividad de un usuario en la aplicación. Este evento puede servirnos para lanzar un salvapantallas para la aplicación o para hacer caducar una sesión si estas cierto tiempo “ausente”, por ejemplo.
Para detectar la inactividad del usuario lo haremos de la siguiente manera:
Primero de todo deberemos importar las siguientes clases:
import mx.managers.SystemManager; import mx.events.FlexEvent; import mx.core.mx_internal;
El evento IDLE necesita estar ligado a una instancia de SystemManager, además, deberemos hacer referencia al namespace mx_internal para poderlo utilizar.
use namespace mx_internal;
SystemManager es automaticamente instanciado como parte de cualquier aplicación que creemos en flex, así que lo único que deberemos hacer es asignar un listener para nuestro evento FlexEvent.IDLE.
this.systemManager.addEventListener(FlexEvent.IDLE, userIdle); |
Una vez hemos añadido nuestro listener, sólo nos queda crear la función que se llamará, en nuestro caso userIdle.
private function userIdle(e:FlexEvent):void {
if(e.currentTarget.mx_internal::idleCounter == 600){
//Tu código
Alert.show("Has estado ausente durante mas de 60 segundos");
}
}
Si quisiéramos poner 5 minutos, lo transformaríamos a milisegundos, que son 300.000, y lo dividiríamos entre 100 ticks, así que el resultado sería 3000. Así que si quisiéramos poner 5 minutos de tiempo de espera, sustituimos 600 por 3000.
Gracias a este evento podemos detectar la inactividad del usuario de una forma fácil y comoda. No hace falta comentar que cuando se detecta actividad, idleCounter se restablece automaticamente.
hola, yo estoy usandolo pero ademas estoy usando modules, (cargandolos con moduleLoader) al parecer no está notando la actividad dentro del componente… help?
Hola,
Prueba a crear una clase (DetectaInactividad, por ejemplo) y instanciarla dentro de cada módulo que cargues, dispachando un evento cuando el usuario haya estado inactivo x tiempo.
Sino también podrías probar copiar el código en cada módulo (no es lo más limpio pero creo que te funcionará).
Espero que te sirva de ayuda.
ya encontré la solucion!
en el main se usa:
this.systemManager.removeEventListener(FlexEvent.IDLE,onUserIDLE);
hasta ahi es como en el articulo..
//supongamos que tienen un menuloader:
//al terminar de cargar el SWF da el evento READY:
id_moduleLoader.addEventListener(ModuleEvent.READY, loaderReadyHandler);
//este handler agrega un listener del componente cargado!
private function loaderReadyHandler(event:Event):void {
id_moduleLoader.loaderInfo.content.addEventListener(FlexEvent.IDLE,onUserIDLE);
}
listo! con esto podemos ver si hay actividad dentro del modulo cargado!
saludos y gracias!
Ok perfecto!!
En cuanto tenga un momento actualizo el post con esta info nueva!!
Gracias!!