尝试实现阻止屏幕在某些View Controller
上进入睡眠状态
我做了什么我用以下代码在运行iOS 12.1.12的实体iPhone 6上测试了我的应用。我将手机Dislpay & Brigthness > Auto-Lock
设置为30秒。我运行了应用,并在运行UIApplication.shared.isIdleTimerDisabled = true
的特定VC上运行,屏幕甚至在30秒后仍然打开。当我切换到不运行UIApplication.shared.isIdleTimerDisabled = true
的其他VC时,屏幕将在30秒后关闭。
我分发到AppStore,我敢肯定,我已经上传了正确的版本,并从AppStore下载了一个新的副本,屏幕总是在东西根本不工作,屏幕将始终关闭以下Auto-Lock
设置.
我读过一些文章https://docs.kioskproapp.com/article/899-ios-12-with-guided-access-causing-kiosk-pro-to-sleep和isIdleTimerDisabled not working in iOS 12
我试了Guided Access
,打开了Guided Access
和Mirror Display Auto-Lock > ON
,仍然不能用于AppStore的应用程序,请帮助。
代码
override func viewDidLoad() {
super.viewDidLoad()
//==== For the screen to remains on
UIApplication.shared.isIdleTimerDisabled = true
}
override func viewDidDisappear(_ animated: Bool) {
//=== Switch off the screen always on, back to the phone settings.
UIApplication.shared.isIdleTimerDisabled = false
}
4条答案
按热度按时间ljo96ir51#
我在iOS 13上也遇到了同样的问题。我发现这个great article解释了为什么
.isIdleTimerDiabled
看起来不起作用。总之,由于iOS 13引入了SceneDelegate,仅仅在AppDelegate中将
.isIdleTimerDisabled
设置为false是不够的,还需要在SceneDelegate中设置上面的代码使我的应用程序免疫自动锁定,但这只是一个快速肮脏的解决方案,一个更好的方法是切换
isIdleTimerDisabled
打开和关闭的基础上ViewController用户正在使用,下面是苹果的文档关于这个属性。您应该设置此属性(
isIdleTimerDisabled
),并应确保在不再需要时将其重置为false。大多数应用应允许系统在空闲计时器超时时关闭屏幕。这包括音频应用。通过正确使用音频会话服务,当屏幕关闭时,播放和录制不间断地进行。唯一应该禁用空闲计时器的应用程序是Map应用程序,游戏,或者当用户交互最少时应用程序需要继续显示内容的程序。oxf4rvwz2#
我还想分享一下丹尼尔Hu提供的答案很棒,但是我有一个问题,为什么它在Xcode中运行时不工作。
测试提示:通过Xcode在调试器下运行应用程序会自动禁用空闲计时器。构建或测试应用程序时,请确保安装应用程序,然后在测试设备上“手动”启动。如果“自动锁定”设置为30秒,效果会最明显。
xu3bshqb3#
您必须从当前视图控制器打开另一个视图控制器。这会在viewDidDisappere调用时将isIdleTimerDisabled的值设置为false。因此,您应该在viewDidAppear中设置UIApplication.shared.isIdleTimerDisabled = true。希望这将解决您的问题。
xqnpmsa84#
以下是如何从场景代理为iOS 13+上的SwiftUI应用程序设置
isIdleTimerDisabled
: