6

ユーザーがアイドル状態のときに発生し、ユーザーが戻ったときに通常の状態に戻る機能を備えた、純粋な AS3 で記述された Adob​​e AIR アプリケーションがあります。次のコードでこのアクティビティを検出しています。

NativeApplication.nativeApplication.idleThreshold = 180;
NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE, onUserIdle);
NativeApplication.nativeApplication.addEventListener(Event.USER_PRESENT, onUserPresent);

onUserIdleメソッドは 3 分後に呼び出されるはずですが、その直後onUserPresentにイベントが発生します。私は数ミリ秒後に話しています。これは、ユーザーの入力がまったくなくても発生します。奇妙なことに、これは Windows では発生せず、OSX でのみ発生します。そして、それは 10.6.3 にさかのぼるすべてのフレーバーの OSX で発生します。

Adobe のドキュメントは、これらのイベントがどのように決定されるかについて非常にあいまいであるため、問題を解決するためにシステム レベルでできることがあるかどうかはわかりません。誰もこの問題の経験がありますか?そうでない場合は、アプリにフォーカスがない場合でもユーザーのアイドル状態を検出する方法について他の提案はありますか?

提案を先取りするために、マウス/キーボードリスナーを使用して同じ動作をシミュレートすることはできません。アプリケーションがフォーカスを失った場合、NativeApplicationイベントは引き続き発生するため、マウス/キーボードリスナーは機能しないためです。またNativeProcess、ioreg の出力を取得して、システムによって報告されたハードウェアのアイドル時間を取得していましたが、マウスの影響を受けていないようです。

どんな援助でも本当に感謝します。

編集:アプリケーションがOSXの管理者アカウントで実行されている場合、これは発生しないことがわかりました。それはユーザーアカウントでのみ発生し、私をさらに混乱させるだけです.

4

1 に答える 1

1

私は問題が何であるかを理解しました。ユーザー アカウントでイベントが発生したときに、USER_IDLEいくつかの処理を行いました。そのうちの 1 つは、Dock を画面から確実に非表示にするために強制的に強制終了しました。何らかの理由で、これにより内部で使用可能なidleThresholdカウントがリセットされます。これは AIR だけで発生していたのではなく、ターミナル経由で監視しているときにも発生しており、それを止めるためにできることはまったくないようです。解決策は、ドックの強制終了を停止することでした。その後、すべてが魔法のように機能しました。

于 2012-10-16T18:29:30.947 に答える