繁体   English   中英

如何快速知道设备屏幕何时被锁定或解锁

[英]how to tell when the device screen is locked or unlocked in swift

本质上,我的应用程序中有一个计时器,如果在计时器处于活动状态时手机或设备被锁定,则我需要它保持运行。 经过大量搜索后,我发现这实际上是不可能的,或者确实可行,但是这样做可能会违反苹果开发人员指南,并可能会将应用程序从商店中删除。

所以我想我会有点聪明,并在Int64的AppDelegate中为“ timerStartedAt”创建一个属性,它只是一个Date()。millisecondsSince1970(我有自定义扩展名)...

extension Date {
    var millisecondsSince1970: Int64 {
        return Int64((self.timeIntervalSince1970 * 1000.0).rounded())
    }

    init(milliseconds: Int64) {
        self = Date(timeIntervalSince1970: TimeInterval(milliseconds) / 1000)
    }

}

然后,在我的计时器视图控制器的“ viewWillAppear”中,检查该属性并设置现在已经运行的时间-该时间。 但是,解锁屏幕时不会调用viewWillAppear。 如果用户在应用程序中切换页面,则确实会调用它,但是在屏幕锁定然后解锁时不会调用。

因此,我试图找到一种方法来在设备解锁时在视图控制器中调用方法。 那有可能吗?

当设备被锁定时,如果您的应用程序位于最前面,那么您将在应用程序委托中获得applicationWillResignActive(_:) ,如果注册则获得相应的通知。

当设备被解锁时,如果您的应用程序位于最前面,则它将再次处于活动状态并且位于最前端,并且您将在应用程序委托中获得applicationDidBecomeActive ,如果注册则获得相应的通知。

(如果您的应用程序不在最前面,则您将无法检测到正在发生任何事情,但这没关系,因为没有“您”,该应用程序未在运行。)

这足以让您编写一个计时器,通过查看计时器的启动时间(或取消激活的时间)与启动时间之间的差异,在后台“保持计数”。 因此,计时器可以在后台有效地“运行”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM