试图实现阻止屏幕在特定的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没有在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
}发布于 2020-10-07 00:48:34
我在iOS 13上也有同样的问题,我发现这个伟大的文章解释了为什么.isIdleTimerDiabled似乎不起作用。
简而言之,正如iOS 13介绍了SceneDelegate,仅仅在AppDelegate中将.isIdleTimerDisabled设置为false是不够的,您也需要在SceneDelegate中设置它。
class SceneDelegate: NSObject, UIWindowSceneDelegate {
var window: UIWindow?
@available(iOS 13.0, *)
func sceneDidBecomeActive(_ scene: UIScene) {
UIApplication.shared.isIdleTimerDisabled = true
}
}上面的代码使我的应用程序对自动锁免疫,但这只是一个快速的脏解决方案,一个更好的方法是根据isIdleTimerDisabled用户使用的ViewController开关,下面是苹果关于这个属性的文档。
只有在必要时才应设置此属性(
isIdleTimerDisabled),并应确保在不再存在此属性时将其重置为false。大多数应用程序应该让系统关闭屏幕时,闲置的计时器过去。这包括音频应用程序。在适当使用音频会话服务的情况下,当屏幕关闭时,播放和录制将不间断地进行。唯一应该禁用空闲计时器的应用程序是映射应用程序、游戏或程序,当用户交互最少时,应用程序需要继续显示内容。
发布于 2022-01-22 01:21:03
我也想分享一下,https://stackoverflow.com/a/64235679/14414215 @Daniel提供的答案很棒,但是我有一些问题,为什么它在通过Xcode运行时不能工作。这个小片段是关键(来自这个链接)
测试注意:通过Xcode在调试器下运行应用程序将自动禁用空闲计时器。在构建或测试应用程序时,一定要安装它,然后在测试设备上“手动”启动它。如果“自动锁定”设置为30秒,效果将是最明显的。
发布于 2022-03-02 09:07:57
您必须从当前视图控制器打开另一个视图控制器。它在isIdleTimerDisabled调用时将viewDidDisappear的值设置为false。因此,您应该在UIApplication.shared.isIdleTimerDisabled中设置viewDidAppear = true。希望这能解决你的问题。
https://stackoverflow.com/questions/54002649
复制相似问题