How to determine the iOS connection type (Edge, 3G, 4G, Wifi)? [duplicate]
For swift we can use following function:
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 "" }}
Swift 5, iOS 12.0 or later:
import SystemConfigurationimport CoreTelephonyimport Foundationclass func getConnectionType() -> String { guard let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "www.google.com") else { return "NO INTERNET" } var flags = SCNetworkReachabilityFlags() SCNetworkReachabilityGetFlags(reachability, &flags) let isReachable = flags.contains(.reachable) let isWWAN = flags.contains(.isWWAN) if isReachable { if isWWAN { let networkInfo = CTTelephonyNetworkInfo() let carrierType = networkInfo.serviceCurrentRadioAccessTechnology guard let carrierTypeName = carrierType?.first?.value else { return "UNKNOWN" } switch carrierTypeName { case CTRadioAccessTechnologyGPRS, CTRadioAccessTechnologyEdge, CTRadioAccessTechnologyCDMA1x: return "2G" case CTRadioAccessTechnologyLTE: return "4G" default: return "3G" } } else { return "WIFI" } } else { return "NO INTERNET" } }
in Objective C:
first 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"; } }