2009-06-21 72 views
5

我目前有一個非常簡單的應用程序,其中唯一的交互是晃動iPhone。然而,由於iPhone沒有得到任何觸摸事件,最終屏幕變暗和自動鎖定。我想知道是否有辦法在動搖時重置自動鎖定超時?延遲但不禁用iPhone自動鎖

我知道,禁用自動鎖完全我這樣做:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

,但我真的不希望完全禁用它;如果iPhone沒有被合法使用,它應該像預期的那樣自動鎖定。

感謝您的幫助。

+2

我以爲嬰兒奶昔被禁止使用。 – 2009-06-21 10:05:04

回答

11

您可以根據您自己的NSTimer或行爲手勢(搖動手機)的值切換[UIApplication sharedApplication].idleTimerDisabled的值。它可以在您的應用程序中多次設置爲YES/NO

+0

好的,我會放棄這一點。我認爲可能只是一個resetIdleTimer方法或更乾淨的東西。 – 2009-06-22 00:01:38

6

下面是我在我的應用程序中使用的代碼。有點背景:我的應用程序有一個內置的Web服務器,所以用戶可以通過WIFI從瀏覽器訪問數據,並且每次請求到達服務器時,我都會延長鎖定計時器(在這種情況下最少2分鐘;一旦重新啓用,您仍然可以獲得默認添加時間量)。

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

此代碼非常有用,我們直接將它放入我們的應用程序,謝謝!僅供參考,我使用運行iOS 5.0.1的iPad 2進行測試似乎表明,固定時間量實際上成爲最小空閒時間 - 即。如果用戶配置的鎖定延遲較少,屏幕也會在setDileTimerDisabled:NO調用之後立即鎖定。如果用戶鎖定時間長於固定時間,則上述代碼無效。 – JosephH 2011-11-18 17:30:14