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事件在用户帐户中触发时,我们做了几件事——其中之一是强行杀死 Dock 以确保它从屏幕上隐藏。无论出于何种原因,这都会重置内部可用idleThreshold计数。这不仅发生在 AIR 中 - 它也发生在通过终端监控时,而且似乎没有任何办法可以阻止它。解决方案是停止杀死码头。在那之后,一切都神奇地起作用了。

于 2012-10-16T18:29:30.947 回答