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

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

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

【问题讨论】:

标签: ios swift xcode


【解决方案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)
    }
    

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

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多