2014-12-09 15 views
12

iOS bağlantı türünü nasıl belirleyebilirim?iOS bağlantı türü nasıl belirlenir (Edge, 3G, 4G, Wifi)?

Cihazımda şu anda Edge, 3G, 4G oder Wifi olup olmadığını öğrenmek istiyorum.

Bu bilgi farklı boyutlarda farklı veriler yüklemem gerekiyor.

Yani, "Edge" bağlantı türüyle 4 MB'lık bir görüntü yüklemek istemiyorum.

+0

onay bu https://github.com/Isuru-Nanayakkara/Swift-Reachability – Kalpesh

+0

olası yinelenen (https://stackoverflow.com/questions/7938650/ [IOS 3G veya WiFi Algılama] ios-detect-3g-or-wifi) –

cevap

3

CTTelephonyNetworkInfo sınıfını Apple'dan kullanabilirsiniz.

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 "" 
    } 


} 
+1

Bu, telefonun WiFi bağlantısında olup olmadığını söyleyecektir - bu durumda, bildirdiğiniz CTTelephonyNetworkInfo nesnesi, taşıyıcı yoksa sıfırdır. –

+1

, bu cevaba bir bağlantı veya snippet sağlamak yararlı olacaktır: olduğu gibi, bir Google aramasından daha az bilgi sağlar (OP'lerin halihazırda yapmış olduğu bir işlem). – Marco

9

@import : iOS 7+ Bunu ithalat gerekir

bu API kullanabilirsiniz. Objective C

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

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

Bunun, erişilebilirlik kitaplığı ve CoreTelephony olmasını gerektirdiğine inanıyorum. –

2

CoreTelephony.framework gereklidir: Biz şu işlevi kullanabilirsiniz Swift için CoreTelephony

+0

"telefonyInfo" nedir? – Umitk

+0

@Umitk "networkInfo" – Aznix

+0

'u kullanın. Bu, kullanıcının * hücresel servis sağlayıcısı * ile ilgilidir, yani bağlantı tipinin wifi'de olup olmadığını kontrol edemem, değil mi? –

3

: CoreTelephony @import

ilk ithalat.

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) 
İlgili konular