在iOS中检查蜂窝networkingtypes

我正在研究一个iOS应用程序,并且想要确定设备具有哪种types的蜂窝连接。

我最感兴趣的是我的设备使用的蜂窝networkingtypes:2G或3G或其他。

但是,Reachability.h仅提供了对wifi或3G的检查。

我如何检查2G,3G等?

2G / 3G无法通过Reachability.h或任何其他第三方库进行区分,因为iPhone仅向API提供networkingtypes信息(WWAN,WiFi,无networking)。

但是,如果您能够了解2G或3Gnetworking的IP范围,则可以确定iPhone正在使用哪种networking速度/频率。

在iOS 7.0中,我们有CoreTelephony框架,可以为我们提供关于networkingtypes的必要细节。

 CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init]; NSString *currentRadio = telephonyInfo.currentRadioAccessTechnology; if ([currentRadio isEqualToString:CTRadioAccessTechnologyLTE]) { // LTE } else if([currentRadio isEqualToString:CTRadioAccessTechnologyEdge]) { // EDGE } else if([currentRadio isEqualToString:CTRadioAccessTechnologyWCDMA]){ // 3G } 

我发现的最好的方法是:

 + (NSNumber *)dataNetworkTypeFromStatusBar { UIApplication *app = [UIApplication sharedApplication]; NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } return [dataNetworkItemView valueForKey:@"dataNetworkType"]; } /* Where 0 = No wifi or cellular 1 = 2G and earlier 2 = 3G 3 = 4G 4 = LTE 5 = Wifi */ 

由于方法是检查状态栏的值,请确保状态栏没有隐藏在您的应用程序中。 如果它不可见,方法将始终返回0。

你可以用3G技术告诉EDGE: 确定3G vs Edge