quedo - Detecta si la pantalla del iPhone está encendida/apagada
mi iphone no prende se queda en la manzana (3)
Sí, no hay un método definitivo. UIApplication
tiene una propiedad protectedDataAvailable
que devolverá YES
cuando la pantalla está desbloqueada y NO
si está bloqueada solo cuando el usuario habilita la protección de contenido . Entonces este es el más cercano pero poco confiable que puedo pensar. En tal caso, incluso puede escuchar las notificaciones UIApplicationProtectedDataDidBecomeAvailable
y UIApplicationProtectedDataWillBecomeUnavailable
.
¿Hay alguna manera de detectar si la pantalla de un iPhone está encendida o apagada? Por ejemplo, cuando se presiona el botón de bloqueo de pantalla del teléfono.
He estado usando (void)applicationWillResignActive:(UIApplication *)application;
prepararse para tales eventos (que funciona bien en su mayor parte), pero este método también se activa para llamadas entrantes, textos, etc.
Por lo que puedo decir, no hay un método documentado para determinar esto.
He estado jugando con algunas soluciones, como comprobar si la resolución de la pantalla ha cambiado, verificar si la orientación es desconocida u obtener el brillo del dispositivo. Nada ha salido aún.
¿Alguien tiene alguna solución creativa / alternativa para esto?
Pruebe esta solución. El autor afirma que funciona bien en 4.2
Lo he comprobado en iOS 3.1 (iPhone 3G) - funciona bien.
actualización: no funciona en iOS 5 beta 7 (iPod Touch 4G) :-(
actualización2: la aplicación va al fondo cuando la pantalla está bloqueada, por lo que la solución está trabajando en iOS 5 beta 7 :-)
Puede usar las notificaciones de Darwin para escuchar los eventos. No estoy 100% seguro, pero me parece que, de ejecutar en un iPhone 4 con iOS 5.0.1 con jailbreak, uno de estos eventos podría ser lo que necesitas:
com.apple.iokit.hid.displayStatus
com.apple.springboard.hasBlankedScreen
com.apple.springboard.lockstate
Nota: de acuerdo con los comentarios del póster a una pregunta similar que respondí aquí , esto también debería funcionar en un teléfono sin jailbreak.
Para usar esto, regístrese para el evento de esta manera (esto se registra solo para un evento, pero si eso no funciona para usted, intente con los otros dos):
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
NULL, // observer
displayStatusChanged, // callback
CFSTR("com.apple.iokit.hid.displayStatus"), // event name
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
donde displayStatusChanged
es su devolución de llamada de evento:
static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSLog(@"event received!");
// you might try inspecting the `userInfo` dictionary, to see
// if it contains any useful info
if (userInfo != nil) {
CFShow(userInfo);
}
}
Creo que los eventos que enumeré arriba se activan cuando la pantalla se enciende y se apaga, se bloquea y se desbloquea. Es posible que deba rastrear el estado usted mismo. También,
com.apple.springboard.lockcomplete
solo se invoca cuando la pantalla se bloquea, no cuando se desbloquea.