iOS - 如何在应用程序处于后台时检测网络更改

时间:2016-10-11 15:05:46

标签: ios swift xcode

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

有人能指出我如何做到这一点的大方向吗?

3 个答案:

答案 0 :(得分:1)

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

查看iOS application lifecycle了解详情

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于某些未指定的时间,您可以使用背景提取来实现。

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)
}

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