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ę.