Domanda

Come faccio a sapere quando un utente è rimasto inattivo per esempio 5 minuti sul mio Flex app?

Quando dico "idle" intendo l'utente non ha interagito con l'applicazione a tutti.

Grazie !!

È stato utile?

Soluzione

Si veda anche l'evento idle in SystemManager . Questo approccio funziona per AIR o Flash Player.

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

È possibile ottenere il tempo di inattività (in modo non supportato) utilizzando

SystemManager.mx_internal::idleCounter

Altri suggerimenti

Essendo che questo è un app AIR, posso solo ascoltare per l'evento USER_IDLE sul NativeApplication

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

Crea un timer che si resetta ogni volta che si cattura un evento utente a livello di applicazione.

Se il timer si è concluso, poi si sa che l'utente è rimasto inattivo per quel periodo di 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();
}

È possibile ottenere il time out utilizzando seguente codice:

 <?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) funziona bene per gli eventi del mouse.

Che dire di eventi di tastiera. Bisogna avere attenzione su qualche elemento prima SystemManager ascolta gli eventi di tastiera.

Soluzione parziale : Su evento applicationComplete, ho aggiunto la riga sotto    stage.addEventListener (KeyboardEvent.KEY_DOWN, handleKeyDown); Ora gli eventi di tastiera sono sempre ascoltati.

Svantaggi: Funziona solo dopo l'applicazione viene cliccato almeno una volta. Poi, dopo funziona bene

C'è un modo per rendere l'applicazione ascoltare gli eventi di tastiera senza problemi di clic una volta. Alcuni hanno suggerito di aggiungere "stage.focus = questo". Non ha funzionato neanche. (Ancora clic è stato necessario)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top