观察 WiFi / 3G 变化

Observe WiFi / 3G changes

是否可以观察用户何时在 WiFi 和蜂窝数据 (3G/4G) 之间切换?

可能是 Reachability 里的东西,但我不知道是什么。

是 可达性为您提供连接的网络类型。它提供 3 种不同的状态 - 未连接到互联网、连接到 Wifi、连接到移动数据。

NetworkStatus status = [reachability currentReachabilityStatus];

if(status == NotReachable) 
{
    //No Connectivity to Internet
}
else if (status == ReachableViaWiFi)
{
    //Connected via WiFi
}
else if (status == ReachableViaWWAN) 
{
    //Connected  via Mobile Data
}

我认为最简单的方法是导入 CoreTelephony 并观察 CTRadioAccessTechnologyDidChangeNotification,然后像这样切换:

let networkInfo = CTTelephonyNetworkInfo()
let radio = networkInfo.currentRadioAccessTechnology

guard let currentRadio = radio else {
   print("No radio info available")
   return
}

switch currentRadio {
   case CTRadioAccessTechnologyLTE,
        CTRadioAccessTechnologyHSDPA: //3.5G "T-Mobile 4G"
       print("This is 4G / LTE")
   case CTRadioAccessTechnologyeHRPD, //3.5G "Verizon 3G"
        CTRadioAccessTechnologyHSUPA,
        CTRadioAccessTechnologyWCDMA,
        CTRadioAccessTechnologyCDMAEVDORev0,
        CTRadioAccessTechnologyCDMAEVDORevA,
        CTRadioAccessTechnologyCDMAEVDORevB:
      print("This is 3G")
   case CTRadioAccessTechnologyGPRS,
        CTRadioAccessTechnologyCDMA1x
        CTRadioAccessTechnologyEdge:
      print("This is 2G")
   default:
      print("Unknown cellular network type")
   }

如果您在侦听该通知的同时还使用标准可达性,则可以使用此开关获取手机网络类型。您将需要 currentReachabilityStatus 来独立检查 WiFi 连接。据我所知,在 Swift 中,您需要设置一个桥接头以使用 Apple 的可达性 class,但在 github 上也有 Swift 实现可用。