首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS-Swift UIApplication.shared.isIdleTimerDisabled = AppStore审查后不工作的情况

iOS-Swift UIApplication.shared.isIdleTimerDisabled = AppStore审查后不工作的情况
EN

Stack Overflow用户
提问于 2019-01-02 07:23:31
回答 3查看 6.4K关注 0票数 5

试图实现阻止屏幕在特定的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-sleepisIdleTimerDisabled没有在iOS 12工作的文章

我试了一下Guided Access,打开了Guided AccessMirror Display Auto-Lock > ON。不过,它并不适用于AppStore的应用程序。请帮帮忙。

代码语言:javascript
复制
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
}
EN

回答 3

Stack Overflow用户

发布于 2020-10-07 00:48:34

我在iOS 13上也有同样的问题,我发现这个伟大的文章解释了为什么.isIdleTimerDiabled似乎不起作用。

简而言之,正如iOS 13介绍了SceneDelegate,仅仅在AppDelegate中将.isIdleTimerDisabled设置为false是不够的,您也需要在SceneDelegate中设置它。

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

上面的代码使我的应用程序对自动锁免疫,但这只是一个快速的脏解决方案,一个更好的方法是根据isIdleTimerDisabled用户使用的ViewController开关,下面是苹果关于这个属性的文档。

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

票数 10
EN

Stack Overflow用户

发布于 2022-01-22 01:21:03

我也想分享一下,https://stackoverflow.com/a/64235679/14414215 @Daniel提供的答案很棒,但是我有一些问题,为什么它在通过Xcode运行时不能工作。这个小片段是关键(来自这个链接)

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

票数 2
EN

Stack Overflow用户

发布于 2022-03-02 09:07:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54002649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档