在OSX上的AIR中挂起笔记本电脑时捕获

时间:2015-09-01 13:46:34

标签: macos actionscript-3 air

高级问题是我想知道用户过去是否在某个特定时间段内。这可以通过跟踪USER_IDLEUSER_PRESENT事件在计算机处于唤醒状态时解决。

但是,我发现当笔记本电脑盖关闭时,它不会触发USER_IDLE事件,也不会在笔记本电脑盖打开时触发USER_PRESENT。笔记本电脑可以关闭数小时,也不会发送任何事件。

那我怎么知道用户是否在场?我已经研究了各种各样的事件来捕获被暂停的笔记本电脑,包括SUSPENDDEACTIVATE等,但没有一个能按我的意愿行事。

例如,我有这个测试代码:

var logFile:File = File.documentsDirectory.resolvePath("events.log");

var app:NativeApplication = NativeApplication.nativeApplication;
app.addEventListener(Event.USER_IDLE, logEvent);
app.addEventListener(Event.USER_PRESENT, logEvent);
app.addEventListener(Event.SUSPEND, logEvent);
app.addEventListener(Event.EXITING, logEvent);
app.addEventListener(Event.ACTIVATE, logEvent);
app.addEventListener(Event.DEACTIVATE, logEvent);
app.addEventListener(InvokeEvent.INVOKE, logEvent);

logEvent(new Event("started"));

function logEvent(e:Event):void {
    var log:String = "\n" + e.type + " at " + new Date();

    var fileStream:FileStream = new FileStream();
    fileStream.open(logFile, FileMode.APPEND);
    fileStream.writeUTFBytes(log);
    fileStream.close();
}

如果我运行此应用程序,将窗口焦点改回然后再关闭,关闭笔记本电脑,然后打开笔记本电脑,我得到此输出:

started at Tue Sep 1 09:29:11 GMT-0400 2015
invoke at Tue Sep 1 09:29:11 GMT-0400 2015
activate at Tue Sep 1 09:29:12 GMT-0400 2015
deactivate at Tue Sep 1 09:29:13 GMT-0400 2015
activate at Tue Sep 1 09:29:13 GMT-0400 2015
deactivate at Tue Sep 1 09:29:17 GMT-0400 2015
activate at Tue Sep 1 09:29:31 GMT-0400 2015

正如您所看到的,这似乎无法帮助我弄清楚用户是否在场(笔记本电脑处于清醒状态)。没有USER_IDLEUSER_PRESENT个事件,即使用户在场,也会发生ACTIVATEDEACTIVATE个事件。

有没有办法知道笔记本电脑是否被暂停?或者知道用户是否在场?

编辑:我想我可以轮询系统时钟。一段时间的大幅跳跃表明在暂停一段时间后醒来。我会试试这个。

0 个答案:

没有答案