2009-06-21 33 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