2009-06-21 13 views
5

Şu anda sadece etkileşimin iPhone'u salladığı çok basit bir uygulamanız var. Ancak, iPhone herhangi bir dokunma olayı almıyor olmasından dolayı ekran kararır ve otomatik olarak kilitlenir. Sarsıldığında otomatik kilitleme zamanını sıfırlamanın bir yolu olup olmadığını merak ediyordum? Gecikmeli ama iPhone otomatik kilitlemeyi devre dışı bırakmıyor

Bunu tamamen ben bu yapacağını otomatik kilit devre dışı bırakmak için biliyorum:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

ama gerçekten tamamen devre dışı istemiyoruz; iPhone yasal olarak kullanılmıyorsa, beklendiği gibi otomatik olarak kilitlenmelidir.

Yardımlarınız için teşekkürler.

+2

Bebek sarsıntısının yasaklandığını sanmıştım. –

cevap

11

Kendi NSTimer veya davranışsal hareketlerinizin değerine bağlı olarak (telefonun çalınması) [UIApplication sharedApplication].idleTimerDisabled değerini değiştirebilirsiniz. Uygulamanızda birden çok kez YES/NO olarak ayarlanabilir.

+0

Tamam, ben onu vereceğim. Sadece bir resetIdleTimer yöntemi veya biraz daha temiz bir şey olabileceğini düşündüm. –

6

Uygulamamda kullandığım kod. Biraz arka plan: Uygulamamın yerleşik bir web sunucusu var, böylece kullanıcılar WIFI üzerinden bir tarayıcıdan veriye erişebiliyor ve sunucuya bir istek geldiğinde, kilit zamanlayıcısını uzatıyorum (bu durumda en az 2 dakika boyunca); Yeniden etkinleştirildiğinde bir kez eklenen varsayılan süreyi almaya devam edebilirsiniz).

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

Bu kod çok kullanışlıdır, doğrudan uygulamamıza indirdik, teşekkürler! Sadece FYI, iOS 5.0.1 çalıştıran bir iPad 2 ile yaptığım testler sabit zamanın aslında minimum boşta kalma süresine dönüştüğünü gösteriyor gibi görünüyor. Kullanıcının yapılandırılmış kilitleme gecikmesi daha azsa, ekran ayrıca setDileTimerDisabled: NO çağrısından hemen sonra kilitlenir. Kullanıcıların kilitlenme süresi sabit süreden daha uzunsa, yukarıdaki kodun bir etkisi olmaz. – JosephH

+0

Kodum iOS4 öncesiydi, bu nedenle, yeni iOS sürümlerinde gözlemlerinizi sağlamanız iyi bir şey. – wkw