公司在做一个项目,需要区分网络类型。Reachability类只能区分WIFI和WWAN类型,却无法区分2G网和3G网。网上也有些方法,却都存在Bug。经过两次的网上查找资料和测试,基本上又三种方法,以下将一一介绍并解析不足。
typedef enum {
NetWorkType_None = 0,
NetWorkType_WIFI,
NetWorkType_2G,
NetWorkType_3G,
} NetWorkType;
1、使用导航栏的方式:(私有API)
代码:
UIApplication *application = [UIApplication sharedApplication];
NSArray *subviews = [[[application valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews];
NSNumber *dataNetWorkItemView = nil;
for (id subView in subviews) {
if ([subView isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
dataNetWorkItemView = subView;
break;
}
}
NetWorkType networkType = NetWorkType_None;
switch ([[dataNetWorkItemView valueForKey:@"dataNetworkType"]integerValue]) {
case 0:
NSLog(@"No wifi or cellular");
networkType = NetWorkType_None;
break;
case 1:
NSLog(@"2G");
net