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

Posted

技术标签:

【中文标题】如何在 iOS 中以编程方式禁用/启用睡眠模式?【英文标题】:How to disable/enable the sleep mode programmatically in iOS? 【发布时间】:2012-09-30 11:46:11 【问题描述】:

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

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

如何以编程方式进行?

【问题讨论】:

【参考方案1】:

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

在 Objective-C 中:

[UIApplication sharedApplication].idleTimerDisabled = YES;

在斯威夫特中:

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 Class。

【讨论】:

@Gati 我对此表示怀疑,但我无法确认,因为我没有手表 @jrturton 嗯.. 它不适用于 Apple Watch。如果您对此有任何解决方案,请告诉我。 感谢您提供此信息。它会派上用场的。我想知道在一个应用程序中禁用睡眠模式是否会影响整个设备。就像我在我的应用程序中禁用它然后退出应用程序一样,应用程序退出后它仍然会被禁用吗?我是否需要检查它是否处于活动状态,然后在退出时重新启用它? @ScottKilbourn 它只会影响您的应用。 [UIApplication sharedApplication] 仅指您的应用的 UIApplication 对象。【参考方案2】:

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

UIApplication.shared.isIdleTimerDisabled = true

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

UIApplication.shared.isIdleTimerDisabled = false

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

这不依赖于 AppDelegate。事实上,我认为在没有任何真正原因的情况下保持设备唤醒是不好的做法。问题是关于在特定功能期间保持设备唤醒(直到倒计时结束)。因此,应考虑在倒计时开始时禁用空闲计时器,并在倒计时结束后再次启用它。 @Cyrus 我不是 swift 程序员。目前我正在制作 webview 应用程序,我尝试了很多没有确切说明的解决方案,但这对我不起作用,但这有效。所以我发布这个以与其他将寻找类似解决方案的人分享。使用这个的原因 - 我的应用程序是吉他助手,需要在演奏过程中始终保持清醒

以上是关于如何在 iOS 中以编程方式禁用/启用睡眠模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式为特定视图控制器禁用/启用睡眠模式?

如何以编程方式禁用 Apple Watch 的睡眠模式

如何在 Swift 中以编程方式启用/禁用菜单对象

如何在 Android 中以编程方式启用禁用 GPS? [复制]

如何在android中以编程方式关闭3G数据连接?

如何启用或禁用特定 ViewController 的横向模式?