2010-02-04 9 views
1

Comment puis-je savoir si un utilisateur a été inactif depuis 5 minutes dans mon application Flex?Flex: détecter un utilisateur inactif?

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

Merci!

Répondre

6

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) à l'aide

SystemManager.mx_internal::idleCounter 
+0

Merci pour l'info! –

1

Créez une minuterie que vous réinitialisez chaque fois que vous capturez un événement utilisateur au niveau de l'application.

Si la temporisation est terminée, vous savez que l'utilisateur a été inactif pendant la durée définie.

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

Merci, j'ai une question, s'il s'agit d'une application AIR, va-t-elle aussi capturer des événements d'autres fenêtres? Merci! –

+0

En outre, chaque fois que l'utilisateur interagit avec une fenêtre modale sur l'application, l'application ne semble pas recevoir les événements? Y a-t-il une solution? –

5

Etant donné que c'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); 
+0

Ceci est la bonne réponse pour Adobe Air – automaticoo

1

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

Brewer-Davis @ Michael SystemManager.addEventListener (FlexEvent.IDLE, onIdle) fonctionne correctement pour les événements de souris.

Qu'en est-il des événements de clavier. Vous devez vous concentrer sur certains éléments avant que systemManager n'écoute les événements de clavier.

Solution partielle: En cas applicationComplete, j'ai ajouté la ligne ci-dessous stage.addEventListener (KeyboardEvent.KEY_DOWN, HandleKeyDown); Les événements de clavier sont maintenant écoutés.

Inconvénient: Ne fonctionne que lorsque l'application est cliquée au moins une fois. Puis après fonctionne bien

Y at-il un moyen de rendre l'application écouter les événements du clavier sans tracas de cliquer une fois. Certains ont suggéré d'ajouter "stage.focus = this". N'a pas fonctionné non plus. (Encore un clic était nécessaire)