Czy można sprawdzić, czy urządzenie z systemem iOS jest zablokowane / odblokowane?

Użyłem aktualizacji lokalizacji GPS w mojej aplikacji. Chcę wykryć, czy urządzenie z systemem iOS jest w trybie uśpienia, dzięki czemu mogę wyłączyć aktualizacje lokalizacji GPS i zoptymalizować zużycie baterii. Próbowałem już wstrzymać aktualizacje lokalizacji w systemie iOS 6, ale nie działa to zgodnie z oczekiwaniami. Chcę wyłączyć aktualizacje lokalizacji GPS, gdy tylko urządzenie przejdzie w tryb uśpienia. Chcę wykryć zdarzenie blokady / odblokowania w urządzeniu.

Czy jest jakiś sposób na osiągnięcie tej funkcjonalności?

jak dotąd otrzymałem powiadomienia darwin, jak podano poniżej

-(void)registerForall
{
    //Screen lock notifications
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                    NULL, // observer
                                    displayStatusChanged, // callback
                                    CFSTR("com.apple.iokit.hid.displayStatus"), // event name
                                    NULL, // object
                                    CFNotificationSuspensionBehaviorDeliverImmediately);


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

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

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

}
//call back
static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
    NSLog(@"IN Display status changed");
    NSLog(@"Darwin notification NAME = %@",name);


}

Jestem w stanie uzyskać powiadomienia darwin, gdy urządzenie jest zablokowane / odblokowane, ale prawdziwym problemem jest to, w jaki sposób zidentyfikować, czy powiadomienie pochodzi od zablokowania lub odblokowania urządzenia. Dzienniki konsoli to:

 LockDetectDemo[2086] <Warning>: IN Display status changed
 LockDetectDemo[2086] <Warning>: Darwin notification NAME = com.apple.springboard.lockcomplete
 LockDetectDemo[2086] <Warning>: IN Display status changed
 LockDetectDemo[2086] <Warning>: Darwin notification NAME = com.apple.springboard.lockstate
 LockDetectDemo[2086] <Warning>: IN Display status changed
 LockDetectDemo[2086] <Warning>: Darwin notification NAME = com.apple.springboard.hasBlankedScreen
 LockDetectDemo[2086] <Warning>: IN Display status changed
 LockDetectDemo[2086] <Warning>: Darwin notification NAME = com.apple.iokit.hid.displayStatus

Wystarczyłoby również prywatne API. Z góry dziękuję.

questionAnswers(7)

yourAnswerToTheQuestion