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

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top