我有一个用纯AS3编写的Adobe AIR应用程序,它具有一些在用户空闲时发生的功能,然后在用户返回时返回到正常状态。我正在使用以下代码检测此活动:
NativeApplication.nativeApplication.idleThreshold = 180;
NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE, onUserIdle);
NativeApplication.nativeApplication.addEventListener(Event.USER_PRESENT, onUserPresent);
应该在3分钟后调用onUserIdle
方法,但之后几乎立即触发onUserPresent
事件。我说的是几毫秒之后。这种情况在没有任何用户输入的情况下发生。奇怪的是,这不会发生在Windows上 - 仅在OSX上。它发生在OSX的所有版本上,可以追溯到10.6.3。
Adobe的文档对于如何确定这些事件非常模糊,所以我不确定我是否可以在系统级别做些什么来解决问题。有没有人对此问题有任何经验,如果没有,有关我如何检测用户闲置的任何其他建议,即使应用程序没有焦点?
为了抢占这个建议,我不能使用鼠标/键盘监听器来模拟相同的行为,因为如果应用程序失去焦点它们不起作用,而NativeApplication
事件仍然会触发。我还使用NativeProcess
来获取ioreg的输出以获得系统报告的硬件空闲时间,但它似乎不受鼠标的影响。
我真的很感激任何协助。
编辑:我刚刚发现当应用程序在OSX上的管理员帐户中运行时不会发生这种情况。它只发生在用户帐户中,这只会让我更加困惑。
答案 0 :(得分:1)
我弄清楚问题是什么。当在用户帐户中触发USER_IDLE
事件时,我们做了几件事 - 其中一件事强行杀死了Dock,以确保它在屏幕上隐藏。无论出于何种原因,这会重置内部可用的idleThreshold
计数。这不仅发生在AIR中 - 当通过终端进行监控时也会发生这种情况,并且似乎没有什么可以阻止它。解决方案是停止杀死码头。在此之后,一切都神奇地起作用。