Question

Comment puis-je savoir quand un utilisateur a été inactif pour dire 5 minutes sur mon application Flex?

Quand je dis « inactif » Je veux dire que l'utilisateur n'a pas interagi avec l'application du tout.

Merci !!

Était-ce utile?

La solution

Voir aussi l'événement idle SystemManager . Cette approche fonctionne pour AIR ou Flash Player.

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

Vous pouvez obtenir le temps d'inactivité (de façon non pris en charge) en utilisant

SystemManager.mx_internal::idleCounter

Autres conseils

Etant donné que cela est une application AIR, je peux écouter l'événement de USER_IDLE sur le NativeApplication

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

Créer une minuterie qui remise à zéro à chaque fois que vous capturez un événement utilisateur au niveau de l'application.

Si la minuterie est terminée, alors vous savez que l'utilisateur a été inactif pendant ce laps de temps.

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

Vous pouvez obtenir le temps en utilisant le code suivant:

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

Brewer-Davis @ Michael

systemManager.addEventListener (FlexEvent.IDLE, OnIdle) fonctionne très bien pour les événements de la souris.

Qu'en est-il des événements de clavier. Vous devez avoir l'accent sur un élément avant systemManager écoute les événements du clavier.

Solution partielle : En cas applicationComplete, j'ai ajouté la ligne ci-dessous    stage.addEventListener (KeyboardEvent.KEY_DOWN, HandleKeyDown); Maintenant, les événements du clavier sont écoutées se.

Inconvénient: Ne fonctionne après l'application est cliqué au moins une fois. Ensuite fonctionne après fin

Est-il possible de faire une demande d'écouter les événements clavier sans tracas de cliquer une fois. Certains ont suggéré d'ajouter « stage.focus = ce ». Ne fonctionne pas non plus. (Cliquez sur Toujours est nécessaire)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top