2014-12-09 6 views
12

Wie ist es möglich, den iOS-Verbindungstyp zu bestimmen?Wie bestimmt man den iOS-Verbindungstyp (Edge, 3G, 4G, Wifi)?

Ich möchte wissen, ob es Edge, 3G, 4G oder Wifi in diesem Moment auf meinem Gerät gibt.

Diese Informationen Ich brauche verschiedene Daten mit einer anderen Größe zu laden.

Also, ich möchte nicht ein Bild von 4 MB mit einem Verbindungstyp "Edge" laden.

+0

Überprüfung dieses https://github.com/Isuru-Nanayakkara/Swift-Reachability – Kalpesh

+0

Mögliche Duplikat [iOS Detect 3G oder WiFi] (https://stackoverflow.com/questions/7938650/ ios-detect-3g-or-wifi) –

Antwort

3

Sie können die CTTelephonyNetworkInfo-Klasse von Apple verwenden. Sie können diese API auf iOS verwenden 7+

Sie müssen es importieren: @import CoreTelephony

+1

Dies zeigt nicht an, ob sich das Telefon in einer WiFi-Verbindung befindet. In diesem Fall ist das CTTelephonyNetworkInfo-Objekt, das Sie deklarieren, null, wenn kein Träger vorhanden ist. –

+1

wäre es hilfreich gewesen, dieser Antwort entweder einen Link oder ein Snippet zur Verfügung zu stellen: So wie es ist, liefert es weniger Informationen als eine Google-Suche (was, wie man sagt, das OP bereits getan hat). – Marco

9

Für rasche können wir folgende Funktion verwenden:

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

Ich glaube, das erfordert Erreichbarkeit Bibliothek und CoreTelephony. –

2

CoreTelephony.framework benötigt wird.

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

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

was ist "telefonyInfo"? – Umitk

+0

@Umitk verwenden "networkInfo" – Aznix

+0

es geht um den * Mobilfunkanbieter des Benutzers * was bedeutet, ich werde nicht in der Lage sein zu überprüfen, ob der Verbindungstyp auf Wifi ist, richtig? –

3

in Objective C:

ersten Import @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) 
Verwandte Themen