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