フレックス:ユーザーのアイドル状態を検出していますか?
-
18-09-2019 - |
質問
ユーザーが Flex アプリで 5 分間アイドル状態になったことをどのように判断すればよいでしょうか?
「アイドル状態」とは、ユーザーがアプリケーションとまったく対話していないことを意味します。
ありがとう!!
解決
また、 idle
<中SystemManager
イベントを参照してください。 />。このアプローチは、AIRまたはFlash Playerで動作します。
application.systemManager.addEventListener(FlexEvent.IDLE, onIdle);
あなたが使用して(サポートされていない方法で)アイドル時間を得ることができます。
SystemManager.mx_internal::idleCounter
他のヒント
これはAIRアプリケーションであることなので、私はちょうどNativeApplicationの
のUSER_IDLEイベントをリッスンすることができます//Set seconds for idle
this.nativeApplication.idleThreshold = 5;
//listen for user idle
this.nativeApplication.addEventListener(Event.USER_IDLE,lock);
あなたは、アプリケーションレベルでのユーザイベントをキャプチャ毎回リセットタイマーを作成します。
タイマが終了している場合は、ユーザーが時間の設定量のためにアイドル状態になっている知っています。
// 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();
}
あなたは以下のコードを使用して、時間を取得することができます:
<?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>
@マイケル・ブリューワー・デイビス
systemManager.addEventListener(FlexEvent.IDLE, onIdle) はマウス イベントに対して正常に機能します。
キーボードイベントについてはどうでしょうか。systemManager がキーボード イベントをリッスンする前に、いくつかの要素にフォーカスする必要があります。
部分的な解決策:ApplicationCompleteイベントでは、以下のラインステージを追加しました。AddeventListener(keyboardevent.key_down、handlekeydown);これで、キーボード イベントがリッスンされるようになりました。
不利益: アプリケーションが少なくとも 1 回クリックされた場合にのみ機能します。その後、正常に動作した後
一度クリックする手間をかけずに、アプリケーションにキーボードイベントをリッスンさせる方法はありますか。「stage.focus = this」を追加することを提案する人もいます。こちらも動作しませんでした(それでもクリックが必要でした)