5

试图实现 停止屏幕在某些时候进入睡眠状态View Controller

我所做 的我已经在运行 iOS 12.1.12 的物理 iPhone 6 上使用以下代码测试了我的应用程序。我将手机设置Dislpay & Brigthness > Auto-Lock为 30 秒。我运行该应用程序并在特定的 VC 上运行UIApplication.shared.isIdleTimerDisabled = true,即使在 30 秒后屏幕仍然亮着。当我切换到其他没有 的 VC 时UIApplication.shared.isIdleTimerDisabled = true,屏幕将在 30 秒后关闭。

我分发到 AppStore 并且我确信我已经上传了正确的版本并从 AppStore 下载了一个新副本,屏幕总是亮着的东西根本不起作用,屏幕总是会在Auto-Lock设置后关闭。

我已经阅读了一些文章https://docs.kioskproapp.com/article/899-ios-12-with-guided-access-causing-kiosk-pro-to-sleepisIdleTimerDisabled 在 iOS 12 中不起作用

我尝试了Guided Access并打开了Guided AccessMirror 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

3 回答 3

9

我在 iOS 13 上遇到了同样的问题。我发现这篇很棒的文章解释了为什么.isIdleTimerDiabled似乎不起作用。

总之,iOS 13 引入了 SceneDelegate,仅仅.isIdleTimerDisabled在 AppDelegate 中设置为 false 是不够的,还需要在 SceneDelegate 中设置

class SceneDelegate: NSObject, UIWindowSceneDelegate {
    var window: UIWindow?
    
    @available(iOS 13.0, *)
    func sceneDidBecomeActive(_ scene: UIScene) {
        UIApplication.shared.isIdleTimerDisabled = true
    }
}

上面的代码使我的应用程序不受自动锁定的影响,但这只是一个快速肮脏的解决方案,更好的方法是isIdleTimerDisabled根据用户使用的 ViewController 来打开和关闭,下面是 Apple 关于此属性的文档。

您应该仅在必要时设置此属性 ( isIdleTimerDisabled),并且应确保在不再需要时将其重置为 false。大多数应用程序应该让系统在空闲计时器结束时关闭屏幕。这包括音频应用程序。通过适当使用音频会话服务,当屏幕关闭时,播放和录制不会中断。唯一应该禁用空闲计时器的应用程序是映射应用程序、游戏或程序,在这些应用程序需要在用户交互最少的情况下继续显示内容。

于 2020-10-07T00:48:34.637 回答
1

只是想分享一下https://stackoverflow.com/a/64235679/14414215 @Daniel Hu 提供的答案很棒,但我遇到了问题,为什么它在通过 Xcode 运行时无法正常工作。这个小片段是关键(来自这个链接

测试说明:通过 Xcode 在调试器下运行应用程序会自动禁用空闲计时器。在构建或测试应用程序时,请确保安装它,然后在测试设备上“手动”启动它。如果“自动锁定”设置为 30 秒,效果会最为明显。

于 2022-01-22T01:21:03.487 回答
0

您必须从当前视图控制器打开另一个视图控制器。当 viewDidDisappear 调用时,将 isIdleTimerDisabled 的值设置为 false。因此,您应该在 viewDidAppear 中设置UIApplication.shared.isIdleTimerDisabled = true 。希望这能解决您的问题。

于 2022-03-02T09:07:57.933 回答