[英]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.