2014-12-09 132 views
12

如何确定iOS连接类型?如何确定iOS连接类型(Edge,3G,4G,Wifi)?

我想知道在我的设备上是否有Edge,3G,4G或Opteron。

这些信息我需要用不同的大小加载不同的数据。

所以,我不想用连接类型“边缘”加载4 MB的图像。

+0

检查这个https://github.com/Isuru-Nanayakkara/Swift-Reachability – Kalpesh 2014-12-09 13:21:38

+0

的可能的复制[iOS的检测3G或WiFi(https://stackoverflow.com/questions/7938650/ ios-detect-3g-or-wifi) – 2017-10-13 14:26:35

回答

3

您可以使用Apple的CTTelephonyNetworkInfo类。您可以在iOS 7+

需要导入它使用这个API: @import CoreTelephony

+1

这不会告诉你手机是否在WiFi连接上 - 在这种情况下,如果没有运营商,则声明的CTTelephonyNetworkInfo对象将为零。 – 2016-01-11 22:02:13

+1

提供链接或摘录给这个答案应该是有帮助的:因为它提供的信息比Google搜索(OP已经完成的一个操作)要少。 – Marco 2016-02-10 23:30:15

9

为SWIFT我们可以使用下面的功能:需要

func getNetworkType()->String { 
    do{ 
     let reachability:Reachability = try Reachability.reachabilityForInternetConnection() 
     do{ 
      try reachability.startNotifier() 
      let status = reachability.currentReachabilityStatus 
      if(status == .NotReachable){ 
       return "" 
      }else if (status == .ReachableViaWiFi){ 
       return "Wifi" 
      }else if (status == .ReachableViaWWAN){ 
       let networkInfo = CTTelephonyNetworkInfo() 
       let carrierType = networkInfo.currentRadioAccessTechnology 
       switch carrierType{ 
       case CTRadioAccessTechnologyGPRS?,CTRadioAccessTechnologyEdge?,CTRadioAccessTechnologyCDMA1x?: return "2G" 
       case CTRadioAccessTechnologyWCDMA?,CTRadioAccessTechnologyHSDPA?,CTRadioAccessTechnologyHSUPA?,CTRadioAccessTechnologyCDMAEVDORev0?,CTRadioAccessTechnologyCDMAEVDORevA?,CTRadioAccessTechnologyCDMAEVDORevB?,CTRadioAccessTechnologyeHRPD?: return "3G" 
       case CTRadioAccessTechnologyLTE?: return "4G" 
       default: return "" 
       } 


      }else{ 
       return "" 
      } 
     }catch{ 
      return "" 
     } 

    }catch{ 
     return "" 
    } 


} 
+0

我相信这需要Reachability库和CoreTelephony。 – 2017-11-29 15:31:21

2

CoreTelephony.framework。

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

if networkString == CTRadioAccessTechnologyLTE{ 
    // LTE (4G) 
}else if networkString == CTRadioAccessTechnologyWCDMA{ 
    // 3G 
}else if networkString == CTRadioAccessTechnologyEdge{ 
    // EDGE (2G) 
} 
+0

什么是“telefonyInfo”? – Umitk 2017-02-14 03:34:51

+0

@Umitk使用“networkInfo” – Aznix 2017-04-17 14:41:38

+0

这是关于用户的*蜂窝服务提供商*这意味着我将无法检查连接类型是否在WiFi上,对不对? – 2017-09-18 19:36:56

3

在Objective C:

首次进口@import CoreTelephony。

Reachability *reachability = [Reachability reachabilityForInternetConnection]; 

    [reachability startNotifier]; 

    NetworkStatus status = [reachability currentReachabilityStatus]; 

    if(status == NotReachable) 
    { 
     //No internet 
    } 
    else if (status == ReachableViaWiFi) 
    { 
     //WiFi 
    } 
    else if (status == ReachableViaWWAN) 
    { 
     CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; 
     NSString * carrierType = netinfo.currentRadioAccessTechnology; 
     if ([carrierType isEqualToString:CTRadioAccessTechnologyGPRS]) { 
//    @"2G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyEdge]) { 
//    @"2G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyWCDMA]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSDPA]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSUPA]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMA1x]) { 
//    @"2G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyeHRPD]) { 
//    @"3G"; 
     } else if ([carrierType isEqualToString:CTRadioAccessTechnologyLTE]) { 
//    @"4G"; 
     } 

    } 
2
import CoreTelephony 

enum RadioAccessTechnology: String { 
    case cdma = "CTRadioAccessTechnologyCDMA1x" 
    case edge = "CTRadioAccessTechnologyEdge" 
    case gprs = "CTRadioAccessTechnologyGPRS" 
    case hrpd = "CTRadioAccessTechnologyeHRPD" 
    case hsdpa = "CTRadioAccessTechnologyHSDPA" 
    case hsupa = "CTRadioAccessTechnologyHSUPA" 
    case lte = "CTRadioAccessTechnologyLTE" 
    case rev0 = "CTRadioAccessTechnologyCDMAEVDORev0" 
    case revA = "CTRadioAccessTechnologyCDMAEVDORevA" 
    case revB = "CTRadioAccessTechnologyCDMAEVDORevB" 
    case wcdma = "CTRadioAccessTechnologyWCDMA" 

    var description: String { 
     switch self { 
     case .gprs, .edge, .cdma: 
      return "2G" 
     case .lte: 
      return "4G" 
     default: 
      return "3G" 
     } 
    } 
}  

// Example: 
let networkInfo = CTTelephonyNetworkInfo() 
let networkString = networkInfo.currentRadioAccessTechnology 
let tecnology = RadioAccessTechnology(rawValue: networkString) 

print(tecnology.description) 
相关问题