我用过:
[UIApplication sharedApplication].idleTimerDisabled = YES;
在iPhone OS 2.x下开发和运行的许多应用程序中都没有任何问题。它们是时钟应用,因此需要不断运行并忽略iPhone的闲置定时器设置。
然而,尝试使用运行OS 3.0的新应用程序(并且需要在3.0下部署,因为它使用了一些3.0 API),我发现空闲的Timer要么被忽略要么不一致。
我的应用程序播放iPod库中的音乐,当音乐播放时,无论上述设置如何,它都会自动锁定。但是一旦你解锁它,它就不会再次自动锁定,除非你再次播放音乐,在这种情况下它会在iPhone自动锁定时间设置后再次锁定。
我很惊讶没有其他人遇到这个,因为我想它会影响大量的应用程序。
只是为了澄清:
1.上面的代码在ApplicationDidFinishLaunching中
2.我知道无论设置如何,从xCode进行测试时手机都不会自动锁定
如果有人有任何想法,我会非常感激......
答案 0 :(得分:16)
我们的应用使用MPMediaPLayer
。我们在idleTimerDisabled=YES
中也有ApplicationFinishedLaunching
代码,如果不受限制,则会有效除外,并且已经有一个当前nowPlayingItem
正在播放(如果在应用启动时暂停,则取消暂停)。显然这都是将Settings -> General -> Autolock
设置为某个定时值。
通过添加idleTimerDisabled=NO
,在其他一些代码之后立即跟idleTimerDisabled=YES
我们已经知道我们将要播放的音乐似乎可以解决问题。只是将其设置为YES
是不够的..后续查询总是指示正确的值(YES
)..所以看起来Apple代码忽略值的设置如果有当前的一块音乐并没有被你的代码改变..但确实注意到了价值的变化。
这完全在 iOS 3.0 下。
答案 1 :(得分:3)
即使在2015年,使用iOS 8.2,这个bug仍然存在并且还在踢。
这是我的解决方案,使用XCode 6.2。
iPhone - phone goes to sleep even if idleTimerDisabled is YES
基本上,即使是现在,在2015年,安全确保设备无法进入睡眠状态的唯一方法是重复调用一段代码以保持设备处于唤醒状态。
-(void)callEveryTwentySeconds
{
// DON'T let the device go to sleep during our sync
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
答案 2 :(得分:0)
听起来像是一个带有Radar的bug文件 - 我并不感到惊讶,因为可能没有很多应用试图锁定屏幕和播放音乐。
答案 3 :(得分:0)
有同样的问题。插入设备时它确实有效。您可以按顶部的锁定按钮,我的NSTimer稍后会触发并导致振动。但是,如果没有插入设备,按下锁定按钮会使设备进入睡眠状态。任何解决方案将不胜感激。
答案 4 :(得分:0)
我开发Seconds - Interval Timer for iPhone and iPod touch并且我没有遇到麻烦。我的应用程序的想法是人们根据许多间隔创建计时器,其中每个间隔可以拥有它自己的播放列表或播放的曲目。
在iOS3中我遇到了一个问题,我只能通过设置idleTimerDisabled = YES来禁用空闲计时器。最后我想出了与Neil相同的解决方案,我会定期将其设置为NO,然后立即再次设置为YES。这似乎有效。
我现在正在将应用更新到iOS4(我知道,iOS5即将到来......)现在我遇到了相反的问题。如果MPMediaPlayer在空闲计时器达到它的限制之前改变了轨道,它就会被重置。我刚刚在我的应用中创建了一个55秒的间隔,我的自动锁定设置为一分钟。在50秒时,屏幕在准备锁定时变暗,但在音乐改变的55秒时,它恢复到全亮度,然后没有按原样锁定。
总的来说,这方面的实施充其量只是好看。