2009-06-21 17 views
5

Actualmente tengo una aplicación muy simple para la cual la única interacción es sacudir el iPhone. Sin embargo, al final, la pantalla se atenúa y se bloquea automáticamente, ya que el iPhone no está recibiendo ningún evento táctil. Me preguntaba si hay una manera de restablecer el tiempo de espera de autobloqueo cuando se agita.Retrasando pero no deshabilitando el bloqueo automático de iPhone

sé que para desactivar el bloqueo automático por completo Me gustaría hacer esto:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

pero realmente no desee desactivar por completo; si el iPhone no se está utilizando legítimamente, se debe bloquear automáticamente como se esperaba.

Gracias por su ayuda.

+2

Pensé que baby-shake se prohibió. –

Respuesta

11

Puede alternar el valor de [UIApplication sharedApplication].idleTimerDisabled basado en el valor de su propio NSTimer o gesto de comportamiento (sacudir el teléfono). Se puede establecer en YES/NO varias veces en su aplicación.

+0

OK, voy a intentarlo. Pensé que podría haber un método resetIdleTimer o algo un poco más limpio. –

6

Aquí está el código que uso en mi aplicación. Un poco de historia: mi aplicación tiene un servidor web incorporado para que los usuarios puedan acceder a los datos de un navegador a través de WIFI y cada vez que llega una solicitud al servidor, extiendo el temporizador de bloqueo (por un mínimo de 2 minutos en este caso; todavía obtienes la cantidad de tiempo predeterminada agregada una vez que vuelves a habilitarla).

// disable idle timer for a fixed amount of time. 
- (void) extendIdleTimerTimeout 
{ 
    // cancel previous scheduled messages to turn idle timer back on 
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
     selector:@selector(reenableIdleTimer) 
     object:nil]; 
    // disable idle timer 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 

    // re-enable the timer on after specified delay. 
    [self performSelector:@selector(reenableIdleTimer) withObject:nil afterDelay: 60 * 2]; 

} 

- (void) reenableIdleTimer 
{ 
sharedApplication].idleTimerDisabled); 
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
     selector:@selector(reenableIdleTimer) 
     object:nil]; 
    // disable idle timer 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
} 
+0

Este código es muy útil, lo dejamos directamente en nuestra aplicación, ¡gracias! Solo para tu información, mi prueba con un iPad 2 con iOS 5.0.1 parece sugerir que la cantidad de tiempo fija en realidad se convierte en el tiempo mínimo de inactividad, es decir. si el retraso de bloqueo configurado del usuario es menor, la pantalla también se bloquea inmediatamente después de la llamada setDileTimerDisabled: NO. Si el tiempo de bloqueo de los usuarios es mayor que la cantidad de tiempo fija, el código anterior no tiene ningún efecto. – JosephH

+0

Mi código es anterior a iOS4, por lo que es bueno que haya proporcionado sus observaciones sobre las versiones más recientes de iOS. – wkw

Cuestiones relacionadas