2017-05-19 2 views
0

Ich weiß, dass es möglich ist, einen Ereignis-Listener zu registrieren, wenn ein Bildschirm ein-/ausgeschaltet ist. Was, wenn ich überprüfen möchte, ob der Bildschirm gerade ein- oder ausgeschaltet ist? Irgendeine Methode für mich, es zu überprüfen?Überprüfen, ob der aktuelle Bildschirm in iOS ein- oder ausgeschaltet ist

Wenn ich Benachrichtigung verwenden, hier zu überprüfen, ist das Ereignis, das geschehen wird:

Wenn ich den Bildschirm sperren. Es auslösen

--- erhielt Benachrichtigung: com.apple.springboard.hasBlankedScreen --- empfing Mitteilung: com.apple.springboard.lockcomplete --- empfing Mitteilung: com.apple.springboard.lockstate --- empfangenen Benachrichtigung: com.apple.iokit.hid.displayStatus

Wenn ich den Bildschirm zu entriegeln, wird es

triggern --- empfangenen Benachrichtigung: com.apple.springboard.hasBlanke dScreen --- erhielt Benachrichtigung: com.apple.springboard.lockstate --- erhielt Benachrichtigung: com.apple.iokit.hid.displayStatus

kann ich nicht einfach erkennen LOCKCOMPLETE zu sehen, ob es zur Zeit ausgeschaltet ist, weil es auch lockstate und displaystatus auslöst, wenn ich versuchte, den Bildschirm zu sperren.

+0

siehe dies: http://StackOverflow.com/a/14208787/3901620 – KKRocks

+0

Ja, ich kenne dieses, und dieses wird nur ausgelöst, wenn es durch den Benutzer ein/aus Aktion ist. Lassen Sie mich sagen, dass mein Code kontinuierlich läuft, auch im Hintergrund. Ich möchte wissen, ob es irgendeine Methode gibt, um zu wissen, ob der Bildschirm gerade ein- oder ausgeschaltet ist, nur eine wahre/falsche Bedingung – user6539552

Antwort

0

Versuchen mit:

static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) 
{ 
    CFStringRef nameCFString = (CFStringRef)name; 
    NSString *lockState = (NSString*)nameCFString; 
    NSLog(@"Darwin notification NAME = %@",name); 

    if([lockState isEqualToString:@"com.apple.springboard.lockcomplete"]) 
    { 
     NSLog(@"DEVICE LOCKED"); 
    } 
    else 
    { 
     NSLog(@"LOCK STATUS CHANGED"); 
    } 
} 

-(void)registerforDeviceLockNotification 
{ 
    //Screen lock notifications 
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center 
            NULL, // observer 
            displayStatusChanged, // callback 
            CFSTR("com.apple.springboard.lockcomplete"), // event name 
            NULL, // object 
            CFNotificationSuspensionBehaviorDeliverImmediately); 

    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center 
            NULL, // observer 
            displayStatusChanged, // callback 
            CFSTR("com.apple.springboard.lockstate"), // event name 
            NULL, // object 
            CFNotificationSuspensionBehaviorDeliverImmediately); 
} 
1

Hier ist die einfache Lösung

Legen Sie das unten Stück Code in viewDidLoad

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.applicationDidBecomeActive(notification:)), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil) 

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.applicationDidEnterBackground(notification:)), 
     name:NSNotification.Name.UIApplicationDidEnterBackground, object: nil) 

Diese Methoden aufgerufen wird, wenn das Gerät gesperrt ist oder entriegelt

@objc func applicationDidBecomeActive(notification: NSNotification) { 
    print("Device is unlocked") 
} 

@objc func applicationDidEnterBackground(notification: NSNotification) { 
     print("Device is locked") 
} 
Verwandte Themen