什麼是檢測用戶當前在他們的計算機上的最佳方式,即以某種方式使用它。如果用戶在他們的計算機上,我們有一個應用程序只應發出通知(帶有關閉按鈕的橫幅通知)。只顯示用戶是否在計算機上的通知
例如,設想一種股票交易應用程序,用於提醒用戶注意可能與幾分鐘相關的各種時間敏感信息。如果用戶遠離他們的計算機,他們不希望發現20個未處理的警報來解僱。
什麼是檢測用戶當前在他們的計算機上的最佳方式,即以某種方式使用它。如果用戶在他們的計算機上,我們有一個應用程序只應發出通知(帶有關閉按鈕的橫幅通知)。只顯示用戶是否在計算機上的通知
例如,設想一種股票交易應用程序,用於提醒用戶注意可能與幾分鐘相關的各種時間敏感信息。如果用戶遠離他們的計算機,他們不希望發現20個未處理的警報來解僱。
技術我不知道如何監視不活動,但我認爲您可以使用超時通知在一定時間間隔後關閉自己和/或將顯示的通知限制爲很少,因此最新的會自動關閉最老的一個。
注:計劃 通知定於火災後的用戶起牀超過15分鐘,就被丟棄。如果 通知以小於15分鐘的時間間隔重複,則其在1分鐘內過期 。過期的通知只會被丟棄,除非他們重複 ,在這種情況下,他們停留在預定列表中,並且稍後再次觸發 。
這是最好的方式,因爲沒有辦法確定「遠離電腦。 – sosborn
您可以改爲檢查用戶的空閒時間。假設用戶離開她的電腦走開,IOKit將報告HID(人機接口設備)上的空閒時間。代碼看起來是這樣的:
int64_t getIdleTime(void) {
io_iterator_t iter;
int64_t idle = 0;
// Step 1: Prepare a matching dictionary for "IOHIDSystem", which is the I/O Kit
// class which we will query
if (IOServiceGetMatchingServices
(kIOMasterPortDefault, IOServiceMatching("IOHIDSystem"), &iter) == KERN_SUCCESS)
{
io_registry_entry_t entry = IOIteratorNext(iter);
// Step 2: If we get the classes, get the property:
if (entry) {
CFMutableDictionaryRef dict;
// Query the HIDIdleTime property, if present.
if (IORegistryEntryCreateCFProperties(entry, &dict, kCFAllocatorDefault, 0) == KERN_SUCCESS)
{
CFNumberRef prop = (CFNumberRef) CFDictionaryGetValue(dict, CFSTR("HIDIdleTime"));
if (prop) {
int64_t nsIdle;
// Value is in Nanoseconds, you might want to convert
if (CFNumberGetValue(prop, kCFNumberSInt64Type, &nsIdle)) {
idle = (nsIdle/1000000000);
}
}
CFRelease(dict); // Be nice. Clean up
}
IOObjectRelease(entry); // as well as here..
}
IOObjectRelease(iter); // and here..
}
return idle;
}
如果鏈接到的ApplicationServices或更高,請嘗試:
CFTimeInterval idleTime = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType);
時間因爲對於事件源最後一個事件。
kCGAnyInputEventType eventType將報告任何輸入事件,鍵盤,鼠標或平板電腦的上次時間戳。各種系統和應用程序定義的事件不會影響此事件類型的時間。
此外,從登錄會話中發佈的程序或應用程序應使用kCGEventSourceStateCombinedSessionState。
解釋硬件狀態和生成事件的用戶空間設備驅動程序應使用kCGEventSourceStateHIDSystemState。
CG_EXTERN CFTimeInterval CGEventSourceSecondsSinceLastEventType(CGEventSourceStateID source,CGEventType eventType)AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
哎呀,這是兩個不同但非常好的問題答案。這兩個答案都值得接受。 :/ – Jacob