Comprobación del tipo de networking celular en iOS

Estoy trabajando en una aplicación para iOS y quiero determinar qué tipo de connection celular tiene el dispositivo.

Estoy muy interesado en el tipo de networking celular que mi dispositivo está utilizando: 2G o 3G u otro.

Sin embargo, Reachability.h solo proporciona comprobación de wifi o 3G.

¿Cómo puedo comprobar si hay 2G, 3G, etc.?

2G / 3G no se puede distinguir a través de Reachability.h ni de ninguna otra biblioteca de terceros, ya que el iPhone solo proporciona información de tipo de networking (WWAN, WiFi, no Network) a la API.

Sin embargo, si puede conocer el range IP de la networking 2G o 3G, puede determinar qué velocidad / frecuencia de networking está utilizando el iPhone.

en iOS 7.0+ tenemos el marco CoreTelephony que nos puede proporcionar los detalles necesarios sobre el tipo de networking.

 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 } 

El mejor método que he encontrado:

 + (NSNumber *)dataNetworkTypeFromStatusBar { UIApplication *app = [UIApplication shanetworkingApplication]; 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 */ 

Puedes distinguir EDGE de 3G con esta técnica: Determinar 3G vs. Edge

Intereting Posts