对于Mac应用程序,我想检测应用程序中的用户活动,因此我可以定期让Web服务知道用户在端点上仍处于活动状态。
在Cocoa Touch中,我会覆盖sendEvent
的{{1}},但Cocoa中UIApplication
等效的sendEvent
不会这样做。
我应该为Mac应用程序使用哪些API来检测用户活动?我可以以某种方式有一个全球响应者连接,从哪里可以发送ping到我的服务?
优选地,我想听取用户可以预期每15-30秒执行一次的动作,即。点击,标签,打字,切换窗口或应用程序。
答案 0 :(得分:3)
您最有可能想要使用global event monitor创建+[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
。每当类型与传递的掩码匹配的事件(您应该使用NSAnyEventMask
)被发送到另一个应用程序时,这将调用您的处理程序。你可以在这里观察,但不能改变,这完全适合你的使用。有一点需要注意:文档说您不会收到关键事件,除非您的应用程序受信任的辅助功能。
对于使用+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]
路由到您自己的应用程序的事件,您可以执行类似操作。
答案 1 :(得分:2)
它不是通知,但您可以使用CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType)
查询自用户活动以来的时间。
答案 2 :(得分:-1)
这对我有用:
-(void) addMyApplicationEventsMonitor {
self.localEventsMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskAny handler:^NSEvent * (NSEvent * event) {
// do your stuff here
return event;
}];
}
-(void)dealloc{
//remember add this to remove your monitor
[NSEvent removeMonitor:self.localEventsMonitor];
}