2012-01-08 11 views
9

Mi aplicación tiene la obligación de solicitar una contraseña si han pasado más de 60 minutos desde la última vez que ingresaron su contraseña o si el usuario ingresa la aplicación después de haber bloqueado el dispositivo.¿Cómo se puede saber si el iPhone se bloquea?

El problema es saber cuándo se bloquea el dispositivo. Si el usuario solo está cambiando de aplicación, la aplicación no necesita solicitar una contraseña a menos que hayan pasado 60 minutos desde la última solicitud de contraseña. Si bloquean el dispositivo, solicítelo nuevamente aunque haya pasado menos de 60 minutos.

Notificaciones tales applicationWillResignActive no ayudan porque no puede determinar si la aplicación se renunciaba activo debido al dispositivo ser bloqueado o el cambio de usuario a otra aplicación.

en la búsqueda, me encontré con mensajes que dicen que pueden registrarse para observar el UIApplicationProtectedDataWillBecomeUnavailable notificación.

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self selector:@selector(protectedDataWillBecomeUnavailable:) 
      name:UIApplicationProtectedDataWillBecomeUnavailable object:nil]; 

Cuando recibo esta notificación, configuro un indicador para solicitar la contraseña del usuario la próxima vez que se active la aplicación. Pero mi prueba ha demostrado que esta notificación es no enviada a menos que el dispositivo tenga una configuración de código de acceso.

He escrito un código de prueba para observar todas las notificaciones, y no veo ninguna otra notificación que indique que el dispositivo se está bloqueando.

¿Hay alguna otra forma de saber cuándo se bloquea el dispositivo?

+1

posible duplicado de [Bloquear desbloquear eventos iphone] (http: // stackoverflow.com/questions/706344/lock-unlock-events-iphone) –

+0

Probablemente la razón por la que no recibió dichas notificaciones es por lo siguiente: "Esto solo se aplica cuando un usuario tiene su dispositivo Protegido con contraseña, Protección de datos es no disponible en el simulador ". –

Respuesta

2

Esta pregunta me intrigó, así que miré un poco por curiosidad. Si bien no parece que haya una notificación útil enviada, parece haber un truco inteligente usando el acelerómetro. Aquí hay un enlace a eso:

Lock Unlock events iphone

+0

Gracias! Esa es una técnica inteligente. Sin embargo, la aplicación debería mantenerse activa en segundo plano, lo cual preferiría evitar. – jimmyg

+0

Es cierto que, idealmente, se enviaría una notificación similar a UIApplicationProtectedDataWillBecomeUnavailable. –

0

No es más sencilla manera - simplemente ponerse notificación UIApplicationDidBecomeActiveNotification y medir el tiempo transcurrido desde la última captura. Pero es necesario restablecer el temporizador cuando el usuario toca la aplicación. Se puede hacer atrapando todos los eventos tap a la ventana de la aplicación. El tiempo transcurrido entre el último toque y UIApplicationDidBecomeActiveNotification le dará tiempo de espera real. También es necesario verificar el tiempo entre UIApplicationDidBecomeActiveNotification actual y reciente: puede ser menor que entre el último toque y UIApplicationDidBecomeActiveNotification.

UIApplicationDidBecomeActiveNotification despedido cuando:

  1. App lanza
  2. App restablece del fondo
  3. aplicación está desbloqueado
  4. llamada de teléfono terminado

es decir, todas las veces cuando la aplicación aparece en la pantalla después de alguna acción.

+0

Gracias. Eso sería útil si solo me dijera si el dispositivo estaba bloqueado desde la última vez que se ejecutó la aplicación. La aplicación necesita solicitar una contraseña si el dispositivo estaba bloqueado. Si no estaba bloqueado, necesita ver si han pasado 60 minutos desde la última vez que se solicitó una contraseña. Puedo controlar el control durante 60 minutos. Simplemente no sé si el teléfono estaba bloqueado anteriormente. – jimmyg

Cuestiones relacionadas