Macos 在OSX上将笔记本电脑悬挂在空中时进行捕获

Macos 在OSX上将笔记本电脑悬挂在空中时进行捕获,macos,actionscript-3,air,Macos,Actionscript 3,Air,高级问题是,我想知道用户是否在过去的给定时间段内存在。当计算机处于唤醒状态时,可以通过跟踪用户空闲和用户在场事件来解决此问题 但是,我发现当关闭笔记本电脑盖时,它不会触发USER\u IDLE事件,也不会在打开笔记本电脑盖时触发USER\u PRESENT。笔记本电脑可以关闭数小时,并且不会发送任何事件 那么,我如何知道用户是否在场?我已经研究了各种各样的事件来捕获被挂起的笔记本电脑,包括挂起,停用,等等,但没有一个事件能满足我的要求 例如,我有以下测试代码: var logFile:File

高级问题是,我想知道用户是否在过去的给定时间段内存在。当计算机处于唤醒状态时,可以通过跟踪
用户空闲
用户在场
事件来解决此问题

但是,我发现当关闭笔记本电脑盖时,它不会触发
USER\u IDLE
事件,也不会在打开笔记本电脑盖时触发
USER\u PRESENT
。笔记本电脑可以关闭数小时,并且不会发送任何事件

那么,我如何知道用户是否在场?我已经研究了各种各样的事件来捕获被挂起的笔记本电脑,包括
挂起
停用
,等等,但没有一个事件能满足我的要求

例如,我有以下测试代码:

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\u IDLE
USER\u PRESENT
事件,即使用户在场,
ACTIVATE
DEACTIVATE
事件也会发生

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



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

空闲/存在的默认时间(秒)是通过NativeApplication.idleThreshold控制的,是5分钟。现在,在挂起模式下,您当然不会收到任何事件,因为笔记本电脑已挂起我相信您将需要一个ANE来捕获iOregisterForSystemEmpower事件,以便准备睡觉或醒来。存在NativeApplication.TimesInclastUserInput属性,您可以每隔一分钟左右在计时器上轮询一次,查看自上次轮询以来它是否发生了更改(假设空闲/当前事件是在此处计算的)。这些未报告操作的逻辑结果是,您的应用程序帧速率应该任意更改,计算机处于活动状态时为正常帧速率,计算机处于非活动状态时为低帧速率。空闲/存在的默认时间(秒)通过NativeApplication.idleThreshold控制,为5分钟。现在,在挂起模式下,您当然不会收到任何事件,因为笔记本电脑已挂起我相信您将需要一个ANE来捕获iOregisterForSystemEmpower事件,以便准备睡觉或醒来。存在NativeApplication.TimesInclastUserInput属性,您可以每隔一分钟左右在计时器上轮询一次,查看自上次轮询以来它是否发生了更改(假设空闲/当前事件是在此处计算的)。这些未报告操作的逻辑结果是,您的应用程序帧速率应该任意更改,计算机处于活动状态时为正常帧速率,计算机处于非活动状态时为低帧速率。