iOS-应用程序处于后台时如何检测网络变化

iOS-应用程序处于后台时如何检测网络变化,ios,swift,xcode,Ios,Swift,Xcode,我正在开发一个iOS应用程序,我想检测用户何时连接/断开Wifi,即使应用程序已关闭。我做了很多研究,但仍然没有找到任何解决这个问题的方法 有人能告诉我怎么做吗?关闭应用程序后无法检测网络连接。进程已关闭,您的代码无法执行 查看更多详细信息也许您应该考虑可以在后台运行的应用程序选项。这当然在iOS中是可能的,您需要能力类型:后台模式。然后,您可以检查wifi是否可用。对于一些未指定的时间,您可以通过使用后台提取来实现这一点 override init() { super.init()

我正在开发一个iOS应用程序,我想检测用户何时连接/断开Wifi,即使应用程序已关闭。我做了很多研究,但仍然没有找到任何解决这个问题的方法


有人能告诉我怎么做吗?

关闭应用程序后无法检测网络连接。进程已关闭,您的代码无法执行


查看更多详细信息

也许您应该考虑可以在后台运行的应用程序选项。这当然在iOS中是可能的,您需要能力类型:后台模式。然后,您可以检查wifi是否可用。

对于一些未指定的时间,您可以通过使用后台提取来实现这一点

override init() {
    super.init()
    initializeBackgroundTask()
    NotificationCenter.default.addObserver(self, selector: #selector(networkHasChanged(notification:)), name: NSNotification.Name.reachabilityChanged, object: nil)
}

func networkHasChanged(notification : NSNotification) {
    if let reachability = notification.object as? Reachability {
             // Do whatever you want to do!!!
    }
}

func initializeBackgroundTask() {
    if bgTask == UIBackgroundTaskInvalid {
        bgTask = UIApplication.shared.beginBackgroundTask(withName: "CheckNetworkStatus", expirationHandler: {
            self.endBackgroundTask()
        })
    }
}


func endBackgroundTask() {
    if deepLinkString == nil {
        if (self.bgTask != UIBackgroundTaskInvalid) {
            UIApplication.shared.endBackgroundTask(self.bgTask)
            self.bgTask = UIBackgroundTaskInvalid
        }
    }
}

deinit {
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.reachabilityChanged, object: nil)
}

如果不使用,也不要初始化后台任务。

请考虑查看这些链接,以获得检测wifi连接的帮助。如果我没弄错的话,那是不可能的。另外,如果您想检测任何东西,请确保在AppDelegateHi Jordy中包含
Application:didEnterBackground
中的代码。您对此有什么想法吗?如果退出应用程序,您肯定是对的。问题是OP是否真的意味着,当他说“关闭”时,这是更加模糊的。无论哪种方式,精度为+1。@BenjaminLowry谢谢。这正是我建议OP阅读更多有关应用程序生命周期的内容的原因。OP需要理解“暂停”、“背景”和“未运行”之间的区别,以便弄清楚要实现什么,并用更精确的术语来描述它。