2016-01-04 11 views
8

Chcę, aby moja aplikacja OSX wywoływała funkcję, gdy ekran użytkownika stanie się dostępny, np. Komputer przebudzi się ze stanu uśpienia lub użytkownik włączy ekran. Zasadniczo za każdym razem, gdy użytkownik przechodzi od braku aktywnego ekranu do posiadania jednego aktywnego, chciałbym wywołać moją funkcję.OSX/Swift: funkcja połączenia, gdy ekran stanie się dostępny

Nie jestem pewien, czy to najlepszy sposób, aby to zrobić jest:

Która z nich wydaje jak najlepiej to zrobić, czy powinienem zrobić coś zupełnie innego? Jakiś przykład kodu Swift byłby bardzo pomocny, ponieważ fragmenty kodu implementujące którekolwiek z nich wydają się być bardzo nieliczne. Dzięki.

Odpowiedz

3

Mogłem otrzymywać powiadomienia o zablokowaniu ekranu i odblokowaniu ekranu w systemie OS X 10.10.5. Niestety nie wiem Swift jeszcze tak oto 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

Cóż, przede wszystkim trzeba sprawdzić, czy można uzyskać rozwiązanie dla wszystkich sytuacjach z różnymi technologiami. Istnieje wiele sytuacji, które włączają się na ekranie (restart systemu, wybudzanie ze snu, ekrany łączące/rozłączające, ...) i nie jestem pewien, czy wszystkie są wyzwalane przez wszystkie technologie.

Jednak zgodnie z ogólną zasadą: Chcesz wiedzieć, kiedy ekran zostanie aktywowany. Użyj powiadomienia, które informuje, że ekran jest aktywny. To jest NSWorkspaceScreensDidWakeNotification. Tak długo, jak to działa, zawsze używałbym techniki najbliższej temu, czego chcę.

+0

Mam nadzieję, że NSWorkspaceScreensDidWakeNotification będzie wystarczające. Tak jak powiedziałeś, prawdopodobnie będę musiał przetestować wszystkie okoliczności, które osobiście włączą wyświetlacz. Miałem nadzieję na coś w rodzaju powiadomienia o parasolach, które przyłapało na tym wszystkim, ale nie wygląda na takie. – yesthisisjoe

+0

Prawdopodobnie istnieją skrzyżowania i jedna z technologii używa innej. Po prostu to sprawdź. (Trudne, ponieważ trudno jest rozpoznać wszystkie sytuacje, ale Twoi użytkownicy to zrobią.: -]) I: Może nie chcesz otrzymywać wszystkich powiadomień, i. mi. po uruchomieniu systemu. –

Powiązane problemy