【问题标题】:idleTimerDisabled not working since iPhone 3.0isidleTimerDisabled 自 iPhone 3.0 起不工作
【发布时间】:2010-11-06 17:17:45
【问题描述】:

我用过:

[UIApplication sharedApplication].idleTimerDisabled = YES;

在许多在 iPhone OS 2.x 下开发和运行的应用程序中,从未遇到任何问题。它们是时钟应用,因此需要持续运行并忽略 iPhone 的空闲计时器设置。

但是,尝试使用运行 OS 3.0 的新应用程序(并且需要在 3.0 下部署,因为它使用一些 3.0 API)来实现相同的目标,我发现空闲计时器要么被忽略,要么不一致。

我的应用程序会播放 iPod 库中的音乐,并且在播放音乐时,无论上述设置如何,它都会自动锁定。但是一旦你解锁它,它就不会再次自动锁定,除非你再次播放音乐,在这种情况下,它会在 iPhone 自动锁定时间设置后再次锁定。

我很惊讶没有其他人遇到过这种情况,因为我认为这会影响大量应用程序。

澄清一下:
1.以上代码在ApplicationDidFinishLaunching
2.我知道无论设置如何,手机在xCode测试时都不会自动锁定

如果有人有任何想法,我将非常感激......

【问题讨论】:

  • 您在播放音乐时是否使用音频会话?我在想,不知何故,当您开始播放音乐时,idleTimerDisabled 属性可能会以某种方式被重置......也许您的修复就像在您开始播放音乐后在代码中添加另一个 idleTimerDisabled=YES 一样简单。
  • 谢谢.. 是的 - 我试过了,思路相同。没区别。干杯。
  • “我知道无论设置如何,从 xCode 测试时手机都不会自动锁定” - 谢谢!我没有意识到这一点,我无法弄清楚为什么我的应用不允许手机自动锁定。

标签: iphone iphone-sdk-3.0


【解决方案1】:

我们的应用使用MPMediaPLayer。我们还在ApplicationFinishedLaunching 中有idleTimerDisabled=YES 代码,除非在不受限制的情况下工作,并且已经有一个当前的nowPlayingItem 正在播放(或未暂停,如果在应用程序启动时暂停)。显然,这一切都是将Settings -> General -> Autolock 设置为某个时间值。

通过添加idleTimerDisabled=NO,紧跟idleTimerDisabled=YES,在我们弄清楚我们要播放的音乐似乎解决了问题之后的其他代码之一。仅将其设置为 YES 是不够的.. 并且后续查询始终指示正确的值 (YES).. 因此,Apple 代码似乎忽略了值的设置如果有当前的音乐,那就是没有被你的代码改变..但确实注意到值的变化。

这一切都在 iOS 3.0 下。

【讨论】:

  • 嗨,尼尔 - 谢谢。实际上,我刚刚找到了相同的解决方法。如果您每 30 秒设置一个计时器,将 idleTimerDisabled 设置为 NO,然后设置为 YES,则无论音乐播放设置如何,它都会保持开启状态。这有点小技巧,但它有效!
  • 我在 iOS 3 中发现了同样的行为,上面的解决方案对我有用。由于我的应用程序中有音频启动和停止,这会破坏我的空闲计时器设置,因此我设置了一个计时器,每次它运行时,我都会检查我的应用程序状态并关闭 idleTimer,然后如果我希望它打开再打开,或者如果我没有关闭它。但是在 iOS 4 下,我发现关闭该循环中的 idleTimer 可以防止设备进入空闲模式!所以我不得不调整我的代码,只关闭一次空闲计时器,而不是每次都通过循环。
【解决方案2】:

即使在 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];
}

【讨论】:

    【解决方案3】:

    听起来像一个错误,使用 Radar 归档 - 我并不感到惊讶,因为可能没有很多应用程序会尝试锁定屏幕打开播放音乐。

    【讨论】:

    • 是的 - 我认为这可能是一个错误 - 我会提交它.. 谢谢。
    【解决方案4】:

    有同样的问题。插入设备后它确实可以工作。您可以按下顶部的锁定按钮,我的 NSTimer 稍后会触发并引起振动。但是,如果设备未插入,按下锁定按钮会使设备进入睡眠状态。任何解决方案将不胜感激。

    • iCodeblog 发了关于idletimer 的帖子,我说它不起作用,开发“可爱时钟”的人很好地回复了。您必须使用 NSTimer 每隔 10 秒左右播放 1 秒或更长时间的静音。即使用户按下锁定按钮,这也会使设备保持唤醒状态。

    【讨论】:

    • 嗨 - 不要忘记连接到 XCode 时设备不会进入睡眠状态 - 这并不意味着 idleTimer 命令正在工作。不过似乎还没有解决方案。
    【解决方案5】:

    我开发了Seconds - Interval Timer for iPhone and iPod touch,但我遇到了无穷无尽的麻烦。我的应用程序的想法是人们根据多个间隔创建计时器,每个间隔都可以播放自己的播放列表或曲目。

    在 iOS3 中,我遇到的问题是我无法通过设置 idleTimerDisabled = YES 来禁用空闲计时器。最后,我想出了与 Neil 相同的解决方案,我会定期将其设置为 NO,然后立即再次设置为 YES。这似乎奏效了。

    我现在正在将应用程序更新到 iOS4(我知道,iOS5 指日可待......)现在我遇到了相反的问题。如果 MPMediaPlayer 在空闲计时器达到其限制之前更改轨道,它将被重置。我刚刚通过在我的应用程序中创建一个 55 秒的间隔来测试这一点,我的自动锁定设置为一分钟。在 50 秒时,屏幕在准备锁定时变暗,但在 55 秒时,当音乐改变时,它又恢复到全亮,然后没有按应有的方式锁定。

    总体而言,这个实现看起来充其量是不稳定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2010-12-02
      • 1970-01-01
      • 2014-03-19
      • 2015-12-16
      • 1970-01-01
      相关资源
      最近更新 更多