如何在iOS中通过编程禁用/启用睡眠模式?

165

我有一个应用程序,必须保持清醒状态直到倒计时结束,但当它达到预定的睡眠时间时,它将进入“睡眠模式”。

在我的应用程序中,我有推迟睡眠的选项,因此用户可以禁用/启用它。

如何以编程方式实现?

4个回答

391
您可以按照以下方式禁用空闲计时器;
在Objective-C中:
[UIApplication sharedApplication].idleTimerDisabled = YES;
在Swift中:
UIApplication.sharedApplication().idleTimerDisabled = true

在 Swift 3.0 和 Swift 4.0 中:

UIApplication.shared.isIdleTimerDisabled = true

将其设置为NOfalse以重新启用睡眠模式。

例如,如果您需要在离开视图之前使用它,可以通过覆盖viewWillDisappear:方法来将其设置回去:

override func viewWillDisappear(_ animated: Bool) {
    UIApplication.shared.isIdleTimerDisabled = false
}

关于UIApplication类的更多内容。


@Gati 我不确定,因为我没有手表,无法确认。 - jrturton
1
@jrturton 嗯...在Apple Watch上它不起作用。如果您有任何解决方案,请告诉我。 - iGatiTech
谢谢提供这些信息,它们会很有用。我在想如果禁用一个应用程序的睡眠模式是否会影响整个设备。比如,如果我在我的应用程序中禁用了它,然后退出应用程序,那么在应用程序退出后它是否仍然被禁用?我需要检查它是否处于活动状态,然后在退出时重新启用它吗? - Scott Kilbourn
2
@ScottKilbourn,它只会影响你的应用程序。[UIApplication sharedApplication]仅指 你的 应用程序的 UIApplication 对象。 - jrturton

25

在Swift 3中,现在禁用空闲计时器的方法是:

UIApplication.shared.isIdleTimerDisabled = true

要重新启用空闲计时器,只需:

UIApplication.shared.isIdleTimerDisabled = false

此外,请注意在Swift中不提供YESNO,您必须使用truefalse(而不是先前的答案)。


4

iOS 13, Swift 5.5.1+版本可以在 SceneDelegate.swift 中禁用空闲计时器。

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     UIApplication.shared.isIdleTimerDisabled = true
 }

-6
在Swift 3中,可以在AppDelegate.swift文件中精确地完成此操作 - 您应该在application函数内添加UIApplication.shared.isIdleTimerDisabled = true,以便结果如下所示:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}

2
这并不依赖于AppDelegate。实际上,如果没有任何真正的原因就让设备保持唤醒状态,我认为这是不好的做法。问题是关于在特定功能期间(直到倒计时结束)保持设备唤醒的。因此,在倒计时开始时禁用空闲计时器,在倒计时结束后再启用它应该被考虑。 - Martin
@Cyrus,我不是Swift程序员。目前我正在制作Webview应用程序,并尝试了许多解决方案,但没有确切的说明,这对我没有用,但是这个方法有效。所以我发布这篇文章与其他寻找类似解决方案的人分享。使用此方法的原因是我的应用程序是吉他助手,在演奏期间需要始终保持唤醒状态。 - godblessstrawberry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接