【问题标题】:OSX/Swift: Call function when screen becomes availableOSX/Swift:屏幕可用时调用函数
【发布时间】:2016-01-04 19:41:36
【问题描述】:

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

我不确定最好的方法是:

其中哪一个似乎是最好的方法,还是我应该完全做其他事情?某种示例 Swift 代码将非常有用,因为实现这些代码的 sn-ps 代码似乎很少而且相差甚远。谢谢。

【问题讨论】:

    标签: swift macos cocoa core-graphics nsworkspace


    【解决方案1】:

    我能够在 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");
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我希望 NSWorkspaceScreensDidWakeNotification 就足够了。就像你说的那样,我可能必须自己测试所有打开显示器的不同情况。我希望有一种可以捕捉所有这些的总括通知,但看起来好像没有。
      • 可能存在交叉点,其中一种技术使用另一种技术。简单地检查一下。 (很难,因为很难识别所有情况。但是,您的用户会这样做。:-])并且:也许您不想获得所有通知,即。 e.系统启动后。
      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多