Reachability 只能判断是WiFi还是蜂窝网络,无法获取到具体的类型是3G还是4G,现在获取手机网络类型可以直接使用苹果原生API了:
首先我们导入库 CoreTelephony.framework
然后在我们的类中加入下面头文件
#import <CoreTelephony/CTTelephonyNetworkInfo.h> #import <CoreTelephony/CTCarrier.h>
下面是获取网络环境的方法:
基本原理是从UIApplication类型中通过valueForKey获取内部属性statusBar。然后筛选一个内部类型(UIStatusBarDataNetworkItemView),最后返回他的dataNetworkType属性。
//获取联网方式 -(NSString *)networkType { NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } NSString *networkType = nil; switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"] integerValue]) { case 0: networkType = @"无服务"; break; case 1: networkType = @"2G"; break; case 2: networkType = @"3G"; break; case 3: networkType = @"4G"; break; case 4: networkType = @"LTE"; break; case 5: networkType = @"Wifi"; break; default: break; } return networkType; } 下面是如何获取运营商名称: //获取运营商信息 -(NSString *)getCarrierName { CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init]; CTCarrier *carrier = [telephonyInfo subscriberCellularProvider]; NSString *currentCountry = [carrier carrierName]; return currentCountry; }
转自:http://blog.csdn.net/dean19900504/article/details/44648583