2016-01-04 3 views
8

Я хочу, чтобы мое приложение OSX вызывало функцию, когда экран пользователя становится доступным, например: их компьютер просыпается от сна или пользователь включает свой экран. В принципе, в любое время, когда пользователь переходит от отсутствия активного экрана к активному, мне бы хотелось, чтобы моя функция вызывалась.OSX/Swift: функция вызова, когда экран становится доступным

Я не уверен, если лучший способ сделать это состоит в следующем:

Какой из них кажется как лучший способ сделать это, или я должен делать что-то еще совсем? Какой-то пример Swift-кода был бы очень полезен, поскольку фрагменты кода, реализующего любой из них, кажутся немногочисленными и далеко друг от друга. Благодарю.

ответ

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

Ну, в первую очередь вы должны проверить, можно ли получить решение для всех ситуаций с различными технологиями. На экране появляется много ситуаций (перезагрузка системы, пробуждение от сна, экраны подключения/отключения, ...), и я не уверен, все ли они вызваны всеми технологиями.

Однако, как правило: вы хотите знать, когда экран активирован. Поэтому используйте уведомление, в котором говорится, что экран активирован. Это NSWorkspaceScreensDidWakeNotification. Как долго это работает, я всегда буду использовать технику, которая ближе всего к тому, что я хочу.

+0

Я надеюсь, что NSWorkspaceScreensDidWakeNotification будет достаточно. Как вы сказали, мне, вероятно, придется протестировать все обстоятельства, которые сами отображают дисплей. Я надеялся на какое-то зонтичное уведомление, которое ловит все это, но похоже, что нет. – yesthisisjoe

+0

Вероятно, есть перекрестки, и одна из технологий использует другую. Просто проверьте это. (Трудно, потому что трудно распознать все ситуации. Однако ваши пользователи будут делать.: -]) И: Может быть, вы не хотите получать все уведомления, например. е. после запуска системы. –

Смежные вопросы