如何在我的应用程序运行时防止iPhone屏幕变暗或关闭?

126

我正在开发一个不需要用户输入的应用程序,但是我不希望iPhone进入省电模式。

是否有可能从应用程序中禁用省电模式?


10
最近所有问题都被踩了,这是怎么回事?在我看来,这似乎是一个合理的问题。 - Eric Schoonover
5个回答

185

Objective-C

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Swift

UIApplication.shared.isIdleTimerDisabled = true

2
这行代码在哪里使用有关系吗?它应该放在AppDelegate还是App的主视图控制器中? - user440096
17
这取决于你打算如何使用它。你可能只有一个视图不想在应用程序中超时。在这种情况下,你会在该视图控制器中使用它(当视图出现时)。为了重新启用计时器,当视图消失时,你需要使用 [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; - Liam George Betsworth
2
应用程序在失去焦点后是否需要重新启用计时器,还是由操作系统自动处理? - Stan James
5
当应用程序处于非活动状态时,操作系统会重新启用空闲模式,您无需调用 [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; - Chris Stringer
在我看来,从哪里调用它并没有什么区别。整个应用程序都会被触发,每个视图都保持在屏幕上,不会变暗。 - decades
有没有办法在应用程序中仅保持一个视图处于活动状态。如果任何其他视图处于活动状态,则屏幕应像往常一样变暗。我已经尝试在其他视图中设置[[UIApplication sharedApplication] setIdleTimerDisabled: NO];但是没有起作用。 - Ayush Malviya

22

Swift 中,您可以将此用作

UIApplication.sharedApplication().idleTimerDisabled = true

12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true

这在Swift 4中仍然保持不变。 - Branson Camp

2
我已经将这行代码放在我的视图控制器中,但我们仍然收到客户反馈说屏幕会变暗或关闭,直到有人触摸屏幕。我看过其他帖子,在那里你不仅可以通过编程方式设置。
UIApplication.sharedApplication().idleTimerDisabled = true 

要将其设置为 true,但您必须首先将其重置为 false。

UIApplication.sharedApplication().idleTimerDisabled = false
UIApplication.sharedApplication().idleTimerDisabled = true

不幸的是,这仍然没有解决问题,客户仍然遇到屏幕变暗的情况。我们有苹果配置文件防止设备进入睡眠状态,但仍然会出现一些设备屏幕变暗,客户需要按Home键唤醒屏幕。我现在将这段代码放入定时器中,每2.5小时触发一次以重置闲置计时器,希望这能解决问题。


1
遗憾的是,将代码放入一个定时器触发的函数中并没有解决问题。我将iPad开着超过24小时,它仍然不会自动调暗屏幕也没有任何交互。根据我们的客户的说法,一名用户在15分钟前使用了该设备,然后设备变暗了。 - JMStudios.jrichardson
我遇到了同样的问题:我有一个视图控制器,在其中设置了idelTimerDisabled = true(应用程序应该在整个夜晚保持打开状态,作为闹钟),大多数情况下它都有效,但有时候应用程序会在夜间被后台化。有人知道是什么原因导致应用程序被移动到后台?或者重置了标志吗? - Yariv Adam
是的,您可以重置标志,我也在这样做。我也将其放在一个函数中。结果发现我们的 MDM 服务器上有一个“流氓进程”向我们的设备发送ping以降低屏幕亮度,非常恼人。 - JMStudios.jrichardson

0

我们遇到了同样的问题。原来是在我们的 MDM 服务器上有一个不良进程,在我们的帐户中已经被删除,但在服务器上仍然发送命令使我们的设备变暗。


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