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

时间:2019-08-19 20:04:13

标签: ios 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。如果用户在应用程序中切换页面,它会被调用,但在屏幕锁定然后解锁时不会被调用。

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

1 个答案:

答案 0 :(得分:1)

由于设备处于锁定状态,如果您的应用程序位于最前面,那么您将在应用程序委托中看到applicationWillResignActive(_:),如果注册了该通知,则会得到相应的通知。

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

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

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