iOS Detect 3G or WiFi
Using the code that Apple has provided here
Reachability *reachability = [Reachability reachabilityForInternetConnection];[reachability startNotifier];NetworkStatus status = [reachability currentReachabilityStatus];if(status == NotReachable) { //No internet}else if (status == ReachableViaWiFi){ //WiFi}else if (status == ReachableViaWWAN) { //3G}
If you don't want to import Reachability library or deal with notifiers, you can use this simple synchronous method:
typedef enum { ConnectionTypeUnknown, ConnectionTypeNone, ConnectionType3G, ConnectionTypeWiFi} ConnectionType;+ (ConnectionType)connectionType{ SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, "8.8.8.8"); SCNetworkReachabilityFlags flags; BOOL success = SCNetworkReachabilityGetFlags(reachability, &flags); CFRelease(reachability); if (!success) { return ConnectionTypeUnknown; } BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); BOOL isNetworkReachable = (isReachable && !needsConnection); if (!isNetworkReachable) { return ConnectionTypeNone; } else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { return ConnectionType3G; } else { return ConnectionTypeWiFi; }}
Import Apple's Reachability and try this,
#import "Reachability.h"#import <CoreTelephony/CTTelephonyNetworkInfo.h>//Try thisReachability *reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; NetworkStatus status = [reachability currentReachabilityStatus]; if(status == NotReachable) { NSLog(@"none"); //No internet } else if (status == ReachableViaWiFi) { NSLog(@"Wifi"); //WiFi } else if (status == ReachableViaWWAN) { NSLog(@"WWAN"); //connection type CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; _carrier = [[netinfo subscriberCellularProvider] carrierName]; if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) { NSLog(@"2G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { NSLog(@"2G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) { NSLog(@"2G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { NSLog(@"3G"); } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { NSLog(@"4G"); } }
References(Links may broke in future) :