+ (NSString *)getNetworkTypeFromStatusBar
{
NSString *networkType = @"";
if (IOS_VERSION >= 7.0) {
// http://www.cnblogs.com/wudan7/p/3587889.html
CTTelephonyNetworkInfo *telephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init];
LOG(@"%@", telephonyNetworkInfo.currentRadioAccessTechnology);
networkType = telephonyNetworkInfo.currentRadioAccessTechnology;
if ([networkType isEqualToString:CTRadioAccessTechnologyGPRS]) {
networkType = @"GPRS";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyEdge]) {
networkType = @"Edge";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyWCDMA]) {
networkType = @"WCDMA";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyHSDPA]) {
networkType = @"HSDPA";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyHSUPA]) {
networkType = @"HSUPA";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
networkType = @"CDMA1x";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) {
networkType = @"CDMAEVDORev0";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) {
networkType = @"CDMAEVDORevA";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) {
networkType = @"CDMAEVDORevB";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyeHRPD]) {
networkType = @"HRPD";
} else if ([networkType isEqualToString:CTRadioAccessTechnologyLTE]) {
networkType = @"LTE";
} else {
networkType = @"";
}
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(radioAccessTechnologyChanged) name:CTRadioAccessTechnologyDidChangeNotification object:nil];
return networkType;
} else { // 调用Apple 私有接口
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;
}
}
switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"] integerValue]) {
case 0:
LOG(@"No wifi or cellular");
break;
case 1:
LOG(@"2G");
networkType = @"2G";
break;
case 2:
LOG(@"3G");
networkType = @"3G";
break;
case 3:
LOG(@"4G");
networkType = @"4G";
break;
case 4:
LOG(@"LTE");
networkType = @"LTE";
break;
case 5:
LOG(@"Wifi");
networkType = @"Wifi";
break;
default:
break;
}
return networkType;
}
}