2014-12-09 104 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) 
相關問題