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

Posted

技术标签:

【中文标题】iOS - 如何在应用程序处于后台时检测网络变化【英文标题】:iOS - how to detect network change when app is in background 【发布时间】:2016-10-11 15:05:45 【问题描述】:

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

有人可以指出如何做到这一点的大致方向吗?

【问题讨论】:

考虑查看这些链接以获取有关检测 wifi 连接的帮助。如果我没记错的话,这是不可能的。 ***.com/questions/30743408/…***.com/a/13638550/6448167 另外,如果您想检测任何内容,请确保在 AppDelegate 中包含 Application: didEnterBackground 中的代码 嗨,乔迪,您对此有什么想法吗? 【参考方案1】:

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

查看iOS application lifecycle了解更多详情

【讨论】:

如果应用程序退出,你肯定是对的。问题是 OP 是否真的意味着当他说“关闭”时,因为这更加模棱两可。无论哪种方式,为准确性 +1。 @BenjaminLowry 谢谢。这正是我推荐 OP 阅读有关应用程序生命周期的更多信息的原因。 OP 需要了解“Suspended”、“Background”和“Not running”之间的区别,以便确定要实现的目标并用更准确的术语进行描述。【参考方案2】:

也许您应该考虑可以在后台运行的应用程序选项。这在 iOS 中当然是可能的,你需要 Capability type:Background Modes。然后你可以检查wifi是否可用。

【讨论】:

【参考方案3】:

在某些未指定的时间内,您可以使用后台提取来实现此目的。

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)

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

【讨论】:

以上是关于iOS - 如何在应用程序处于后台时检测网络变化的主要内容,如果未能解决你的问题,请参考以下文章

IOS 6 中的音量检测

ios检测终止状态下的蓝牙状态变化

应用程序处于后台时的 iOS 可达性

如何在iOS 8中应用程序处于后台状态时连续执行任务

在后台检测可达性

iOS如何在本地通知上启动后台任务