2012-11-17 39 views
4

檢測用戶閒置X時間的最佳方式是什麼,然後檢測用戶何時立即處於活動狀態?用戶在OS X上空閒後發出通知?

我知道有NSWorkspace提供了/將會發出睡眠/喚醒通知,但是我不能依賴它,因爲睡眠設置通常約爲15分鐘,永遠不會。我需要能夠檢測用戶是否閒置了1-2分鐘。

這個answer提供了一種獲得空閒時間的方法。如果可能,我想避免輪詢。

+0

爲什麼你想避免投票?可能你不必頻繁地進行調查。你需要什麼決議? 1分鐘? 1秒?每分鐘輪詢一次不會低效。即使每秒一次也不會太壞。 – user1118321

+0

每秒鐘輪詢一次會泄漏筆記本電腦上的電池電量。你真的不應該這樣做。 – Glyph

回答

2

投票是你唯一的選擇,據我所知。正如user1118321指出的那樣,輪詢每O(分鐘)不太可能導致任何問題,性能或其他。

如果您的應用程序具有GUI並接收UI事件,您可以通過+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]安裝一個處理程序,以便在每個事件中重置您的計時器。這將有助於減少在用戶始終處於活動狀態時排除投票,至少在您自己的應用程序中。

確定用戶空閒時間足夠長後,您可以安裝全局事件點擊以查看下一個事件。例如參見-[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]

注意:如果可能,應該使用CGEventSourceSecondsSinceLastEventType而不是插入IO註冊表。這是一個正式的,受支持的API,可能更有效。更不用說它更簡單了。也有UKIdleTimer,雖然它依賴於碳,所以可能不適用。

+0

我結束了使用'CGEventSourceSecondsSinceLastEventType'來計算何時觸發NSTimer(60秒 - idleTime)。當用戶空閒時,使用CGEventTapEnable啓用我的事件點擊。當用戶再次激活時,我用相同的命令禁用它。事件分支在開始時創建爲'kCGEventMaskForAllEvents'和'kCGEventTapOptionListenOnly'。似乎很好! – Luke