2009-06-21 7 views
5

Attualmente ho un'app molto semplice per cui l'unica interazione è scuotere l'iPhone. Tuttavia alla fine lo schermo si attenua e si blocca automaticamente poiché l'iPhone non riceve alcun evento di tocco. Mi chiedevo se c'è un modo per resettare il timeout del blocco automatico quando viene scosso?Ritardare ma non disabilitare il blocco automatico dell'iPhone

so che per disabilitare auto-lock completamente farei questo:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

ma io in realtà non voler disabilitare completamente; se l'iPhone non viene utilizzato legittimamente, dovrebbe bloccarsi automaticamente come previsto.

Grazie per il vostro aiuto.

+2

Pensavo che il baby-shake fosse stato vietato. –

risposta

11

È possibile alternare il valore di [UIApplication sharedApplication].idleTimerDisabled in base al valore del proprio NSTimer o al gesto comportamentale (scuotendo il telefono). Può essere impostato su YES/NO più volte nella tua applicazione.

+0

OK, ci provo. Ho pensato che ci potrebbe essere solo un metodo resetIdleTimer o qualcosa di un po 'più pulito. –

6

Ecco il codice che uso nella mia app. Un po 'di sottofondo: la mia app ha un server web incorporato in modo che gli utenti possano accedere ai dati da un browser tramite Wi-Fi e ogni volta che arriva una richiesta nel server, estendo il timer di blocco (per un minimo di 2 minuti in questo caso; si ottiene ancora la quantità di tempo predefinita aggiunta una volta riattivata).

// 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

Questo codice è molto utile, lo abbiamo inserito direttamente nella nostra app, grazie! Solo FYI, il mio test con un iPad 2 con iOS 5.0.1 sembra suggerire che la quantità fissa di tempo diventa effettivamente il tempo minimo di inattività - cioè. se il ritardo di blocco configurato dall'utente è inferiore, lo schermo si blocca anche immediatamente dopo setDileTimerDisabled: NO call. Se il tempo di blocco degli utenti è più lungo della quantità di tempo prestabilita, il codice sopra riportato non ha alcun effetto. – JosephH

+0

Il mio codice è pre-iOS4, quindi è bene che tu abbia fornito le tue osservazioni sulle nuove versioni di iOS. – wkw