观察WiFi / 3G变化

时间:2016-03-24 17:28:15

标签: ios swift reachability

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

也许在Reachability中有些东西,但我不知道是什么。

2 个答案:

答案 0 :(得分:3)

我认为最简单的方法是导入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的Reachability类,但是在github上也有Swift实现。

答案 1 :(得分:2)

是可达性为您提供连接的网络类型。它提供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
}