【问题标题】:Is it possible to check if WiFi is connected but there is no internet connection in Swift using Reachability?是否可以使用可达性检查 WiFi 是否已连接但 Swift 中没有互联网连接?
【发布时间】:2018-09-25 15:39:09
【问题描述】:

我不知道这是否可能,但这是我的问题 -

  • 当 WiFi 已连接且互联网开启时,路由器上的黄灯会亮起
  • 当 WiFi 已连接且互联网关闭时,路由器上的红灯会亮起

那么是否可以区分第二种情况,还是与无法访问Internet时相同?

我正在使用https://github.com/ashleymills/Reachability.swift

完整代码可见https://github.com/deadcoder0904/net-alert

基本上就在one file

相关代码-

let reachability = Reachability()!

reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
            print("Reachable via WiFi")
            self.setStatusIcon(color: "green")
    } else {
            print("Reachable via Cellular")
            self.setStatusIcon(color: "yellow")
    }
}

reachability.whenUnreachable = { _ in
    print("Not reachable")
    self.setStatusIcon(color: "red")
}

do {
    try reachability.startNotifier()
} catch {
    print("Unable to start notifier")
    self.setStatusIcon(color: "yellow")
}

其中setStatusIcon()根据颜色设置状态图标

我想知道何时无法访问互联网但 Swift 中连接了 WiFi?

【问题讨论】:

  • 使用这个问题的答案:stackoverflow.com/questions/26971240/…,你可以运行ping 8.8.8.8,例如,看看你是否得到答案。得到答案将意味着有互联网。以防万一可达性没有提供更好的方法。
  • 哎呀我怎么没想到。谢谢@regina_fallangi 我会更新我的代码看看它是否有效
  • 我相信它适用于除中国以外的任何地方。如果它有效,请回答您自己的问题,看看它是否有效肯定很有趣。
  • @dniswhite 我在 swift 中有相同的代码。它只是没有连接Wifi但没有互联网的情况:(

标签: ios swift macos cocoa reachability-swift


【解决方案1】:

我找到了解决方案。

正如 Augie 所建议的那样,Reachability 无法做到这一点,因为它只是检查 WiFi 或蜂窝网络是否可达。

所以我不得不 ping 一个网站来检查它是否在线。

如果我收到 200 响应,则表示它已连接。

但如果我没有得到 200,那么即使连接了 WiFi 但没有互联网。

我不知道如何正确 Ping,所以我问another question 我从哪里得到the answer

完整代码见https://github.com/deadcoder0904/net-alert

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多