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


162

我有一个应用程序,必须保持清醒状态直到倒计时结束,但是只要达到分配的睡眠时间,它就会进入“睡眠模式”。

在我的应用中,我可以选择推迟睡眠,以便用户可以禁用/启用它。

如何以编程方式进行?

Answers:


379

您可以按以下方式禁用空闲计时器;

在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 2015年

1
@jrturton嗯。。它在Apple Watch中不起作用。如果您对此有任何解决方案,请告诉我。
iGatiTech

感谢您提供此信息。它将派上用场。我想知道在一个应用程序中禁用睡眠模式是否会影响整个设备。就像我在应用程序中将其禁用然后退出该应用程序一样,退出应用程序后仍将其禁用吗?我需要检查它是否处于活动状态,然后在退出时将其重新启用吗?
Scott Kilbourn

2
@ScottKilbourn它仅影响您的应用程序。[UIApplication sharedApplication]指的是你的唯一的应用程序的UIApplication对象。
jrturton

22

在Swift 3中,要禁用空闲计时器,现在是:

UIApplication.shared.isIdleTimerDisabled = true

重新打开空闲计时器很简单:

UIApplication.shared.isIdleTimerDisabled = false

另外,请注意YESNO在Swift中不可用,并且您必须使用truefalse(与上一个答案相反)。


1

iOS 13,Swift 5,5.1+禁用空闲计时器。在中SceneDelegate.swift

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

-5

在Swift 3中可以执行此操作的确切位置是AppDelegate.swift-您应该UIApplication.shared.isIdleTimerDisabled = trueapplicationfunc 内添加内容,这样结果将如下所示:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}

2
这不依赖于AppDelegate。实际上,我认为在没有任何真正原因的情况下保持设备处于唤醒状态是不明智的做法。问题是关于在特定功能期间保持设备苏醒(直到倒计时结束)。因此,应考虑在倒数开始结束时禁用空闲计时器,并在倒数结束后再次启用它。
马丁

@Cyrus我不是敏捷的程序员。目前,我正在开发webview应用程序,我尝试了许多没有确切说明的解决方案,但对我而言并不起作用,但这可以解决。因此,我将其发布给其他正在寻找类似解决方案的人。使用它的原因-我的应用程序是吉他助手,需要在演奏过程中始终唤醒
godblessstrawberry
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.