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 - 如何在应用程序处于后台时检测网络变化的主要内容,如果未能解决你的问题,请参考以下文章