Flex: Erfassen Benutzer inaktiv?
-
18-09-2019 - |
Frage
Wie kann ich feststellen, wenn ein Benutzer für etwa 5 Minuten auf meinem Flex App im Leerlauf sind?
Wenn ich sage „idle“ Ich meine, der Benutzer nicht mit der Anwendung überhaupt in Wechselwirkung getreten ist.
Danke !!
Lösung
Sehen Sie die idle
Veranstaltung auch in SystemManager
. Dieser Ansatz funktioniert für AIR oder Flash Player.
application.systemManager.addEventListener(FlexEvent.IDLE, onIdle);
Sie können die Leerlaufzeit erhalten (in einer nicht unterstützten Weise) mit
SystemManager.mx_internal::idleCounter
Andere Tipps
Ist, dass dies eine AIR-Anwendung ist, kann ich für das USER_IDLE Ereignis höre nur auf der Native
//Set seconds for idle
this.nativeApplication.idleThreshold = 5;
//listen for user idle
this.nativeApplication.addEventListener(Event.USER_IDLE,lock);
Erstellen Sie einen Timer, die Sie zurücksetzen jedes Mal wenn Sie ein Benutzerereignis auf der Anwendungsebene erfassen.
Wenn der Timer abgelaufen ist, dann wissen Sie, der Benutzer für diese bestimmte Zeit inaktiv war.
// 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();
}
Sie können die Zeit aussteigen durch folgenden Code:
<?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, BEILEERLAUF) arbeitet für Mausereignisse in Ordnung.
Was Tastaturereignisse. Sie haben auf ein Element Fokus haben, bevor systemmanager auf Tastaturereignisse hört.
Teillösung : Auf application Ereignis, fügte ich die unterhalb der Linie stage.addEventListener (KeyboardEvent.KEY_DOWN, HandleKeyDown); Jetzt Tastaturereignisse werden gehört zu werden.
Nachteil: Funktioniert nur nach Anwendung mindestens einmal angeklickt wird. Dann, nachdem funktioniert
Gibt es eine Möglichkeit Anwendung ohne lästiges klicken einmal auf Tastaturereignisse machen zu hören. Einige schlugen vor, „Stage.focus = this“ hinzuzufügen. Hat nicht funktioniert. (Es wurde noch ein Klick erforderlich)