Pergunta

Como posso dizer quando um usuário estiver ocioso por exemplo 5 minutos em meu aplicativo Flex?

Quando eu digo "idle" Quero dizer que o usuário não tem interagido com a aplicação a todos.

Graças !!

Foi útil?

Solução

Veja também o evento idle em SystemManager . Esta abordagem funciona para AIR ou Flash Player.

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

Você pode obter o tempo ocioso (de forma não suportada) usando

SystemManager.mx_internal::idleCounter

Outras dicas

Sendo que este é um aplicativo AIR, eu só posso ouvir o evento USER_IDLE na NativeApplication

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

Criar um timer que você redefinir toda vez que você capturar um evento de usuário no nível do aplicativo.

Se o temporizador terminou, então você sabe que o usuário tenha sido ocioso para aquele determinado período de tempo.

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

Você pode obter o tempo fora, usando seguinte código:

 <?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) multa trabalha para eventos do mouse.

E sobre eventos de teclado. Você tem que ter foco em algum elemento antes systemManager escuta eventos de teclado.

solução parcial : No evento applicationComplete, eu adicionei a linha abaixo stage.addEventListener (KeyboardEvent.KEY_DOWN, handleKeyDown); Agora eventos de teclado estão sendo escutado.

Desvantagem: Só funciona após a aplicação é clicado pelo menos uma vez. Então, depois de obras fino

Existe alguma maneira de fazer a aplicação ouvir eventos de teclado, sem pressa de clicar uma vez. Alguns sugeriram acrescentar "Stage.focus = this". não quer trabalhar. (clique ainda era necessária)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top