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!
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!
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
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();
}
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! –
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? –
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);
Ceci est la bonne réponse pour Adobe Air – automaticoo
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 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)
Merci pour l'info! –