当设备连接到某个热点并且该热点的移动数据关闭时如何检查网络可达性

问题描述 投票:0回答:2

我使用 Almofire 来实现网络可达性。这是场景:

  1. 将iPad/iPhone连接至移动热点。
  2. 现在打开移动数据,检查网络可达状态。它会返回 true。这样就好了
  3. 现在关闭移动数据,但iPad/iPhone与热点设备之间仍然有热点连接。
  4. 现在检查网络可达状态,它会再次返回true。理想情况下它应该返回 false,因为服务器无法访问。
class ReachabilityManager: NSObject {

  static let shared = ReachabilityManager()

  let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "my.server.url")

  var isReachable : Bool {

    return reachabilityManager?.isReachable ?? false

  }

}

ios swift objective-c alamofire reachability
2个回答
0
投票

也许尝试用

NWPathMonitor
替换可达性。

它更可靠,给您更多选择。

这是一个例子:

import Network 

let monitor = NWPathMonitor()

func monitorNetwork() {
    monitor.pathUpdateHandler = { path in
        if path.status == .satisfied {
            connectionAvailable = true
        } else {
            connectionAvailable = false
        }
    }
    let queue = DispatchQueue(label: "Net")
    monitor.start(queue: queue)
}

您还可以检查用户是否正在使用蜂窝数据或连接到热点:

path.isExpensive

根据文档:

一个布尔值,指示路径是否使用以下接口 被认为昂贵,例如蜂窝或个人热点。

此外,您可以检查各种连接要求或类型:

let monitor = NWPathMonitor(requiredInterfaceType: .cellular)

这为您提供了更多选项,例如:.wifi、wierdEthernet、环回、其他。

请参阅以下文档:

NWInterface.InterfaceType


0
投票
let reachability = Reachability()!

//This function is find to wifi or Cellular network
reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
        print("Reachable via WiFi")
    } else {
        print("Reachable via Cellular")
    }
}

//When Network is Off This Function Call
reachability.whenUnreachable = { _ in
    print("Not reachable")
}

//This code is automatically call when network is on.
do {
    try reachability.startNotifier()
} catch {
    print("Unable to start notifier")
}
© www.soinside.com 2019 - 2024. All rights reserved.