仅在用户在计算机时显示通知

Jac*_*cob 5 macos xcode cocoa osx-mountain-lion

什么是检测用户当前是否在他们的计算机上的最佳方式,即以某种方式使用它.如果用户在他们的计算机上,我们有一个应该只发出通知(带有关闭按钮的横幅通知)的应用程序.

例如,假设一个股票交易应用程序向用户发出可能仅与几分钟相关的各种时间敏感信息.如果用户远离他们的计算机,他们不希望找到20个未采取行动的警报来解雇.

geo*_*war 8

如果链接ApplicationServices或更高版本,请尝试:

CFTimeInterval idleTime = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType);
Run Code Online (Sandbox Code Playgroud)

自上次事件源以来的时间.

kCGAnyInputEventType eventType将报告任何输入事件,键盘,鼠标或平板电脑的最后时间戳.各种系统和应用程序定义的事件不会影响此事件类型的时间.

同样,在登录会话中发布的程序或应用程序应使用kCGEventSourceStateCombinedSessionState.

解释硬件状态和生成事件的用户空间设备驱动程序应使用kCGEventSourceStateHIDSystemState.

CG_EXTERN CFTimeInterval CGEventSourceSecondsSinceLastEventType(CGEventSourceStateID source,CGEventType eventType)AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;


Jan*_*anT 7

Technicaly我不知道如何监视不活动但我认为您可以使用超时通知在一段时间间隔后关闭自己和/或将显示的通知限制为少,所以最新的通知将自动关闭最旧的通知.

苹果文档:

注意:如果用户在计划发出预定通知后超过15分钟醒来,则会被丢弃.如果通知以小于15分钟的间隔重复,则它将在1分钟后到期.过期的通知只是被丢弃,除非它们重复,在这种情况下,它们会保留在计划列表中,然后再次触发.