OSX / Swift:屏幕可用时调用功能

时间:2016-01-04 19:41:37

标签: swift macos cocoa core-graphics nsworkspace

我希望我的OSX应用程序在用户的屏幕可用时调用一个函数,例如:他们的计算机从睡眠状态唤醒或者用户打开他们的屏幕。基本上任何时候用户从没有屏幕激活到激活,我希望我的函数被调用。

我不确定这样做的最佳方法是:

其中哪一项似乎是最好的方法,或者我应该完全做其他事情?某种示例Swift代码非常有用,因为实现其中任何一个的代码片段似乎很少。感谢。

2 个答案:

答案 0 :(得分:3)

我能够在OS X 10.10.5上收到屏幕锁定和屏幕解锁的通知。对不起,我不知道Swift,所以这里是Objective-C:

NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(screenIsLocked) name:@"com.apple.screenIsLocked" object:nil];
[center addObserver:self selector:@selector(screenIsUnlocked) name:@"com.apple.screenIsUnlocked" object:nil];

- (void)screenIsLocked {
    NSLog(@"screen is locked");
}

- (void)screenIsUnlocked {
    NSLog(@"screen is unlocked");
}

答案 1 :(得分:1)

首先,您必须测试,是否可以使用不同技术获得所有情况的解决方案。有很多情况会打开显示屏(系统重启,从睡眠状态唤醒,连接/断开屏幕......),我不确定它们是否都是由所有技术触发的。

但是,作为一般规则:您想知道,何时激活屏幕。因此,请使用告知您屏幕已激活的通知。这是NSWorkspaceScreensDidWakeNotification。只要它有效,我总会使用最接近我想要的技术。