2016-01-04 9 views
8

Ich möchte, dass meine OSX-App eine Funktion aufruft, wenn der Benutzerbildschirm verfügbar wird. Beispiel: Der Computer wird aus dem Ruhezustand aktiviert oder der Benutzer schaltet den Bildschirm ein. Grundsätzlich möchte ich jederzeit, wenn der Benutzer keinen aktiven Bildschirm mehr hat, die Funktion aufrufen.OSX/Swift: Rufen Sie die Funktion auf, wenn der Bildschirm verfügbar wird

bin ich nicht sicher, ob der beste Weg, dies zu tun ist:

hören, die von diesen scheinen wie der beste Weg dies zu tun, oder sollte ich etwas ganz anderes machen? Eine Art von Beispiel Swift-Code wäre wirklich hilfreich, da Codeschnipsel, die einige davon implementieren, nur wenige sind. Vielen Dank.

Antwort

3

Ich konnte Benachrichtigungen für Bildschirmsperre und Bildschirm entsperren auf OS X 10.10.5 erhalten. Sorry, ich kenne Swift noch nicht so ist hier das 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

Nun, zunächst alles, was Sie testen müssen, ob Sie die Lösung für alle Situationen mit den verschiedenen Technologien zu bekommen. Es gibt viele Situationen, die das Display einschaltet (Systemneustart, Ruhezustand aus dem Ruhezustand, Bildschirme verbinden/trennen, ...) und ich bin mir nicht sicher, ob sie alle von allen Technologien ausgelöst werden.

Als allgemeine Regel: Sie möchten wissen, wann der Bildschirm aktiviert ist. Verwenden Sie also die Benachrichtigung, dass der Bildschirm aktiviert ist. Dies ist NSWorkspaceScreensDidWakeNotification. So lange es funktioniert, würde ich immer die Technik verwenden, die meinem Wunsch am nächsten kommt.

+0

Ich hoffe, dass NSWorkspaceScreensDidWakeNotification genug sein wird. Wie du schon sagtest, werde ich wahrscheinlich alle verschiedenen Umstände testen müssen, die das Display selbst anschalten. Ich habe auf eine Art Regenschirm-Benachrichtigung gehofft, die all diese Dinge auffängt, aber es sieht nicht so aus, als ob es einen gibt. – yesthisisjoe

+0

Wahrscheinlich gibt es Kreuzungen und eine der Technologien verwendet eine andere. Überprüfen Sie es einfach. (Schwierig, weil es schwierig ist, alle Situationen zu erkennen. Allerdings werden Ihre Benutzer das tun.: -]) Und: Vielleicht möchten Sie nicht alle Benachrichtigungen erhalten, ich. e. nach dem Systemstart. –