porque moviles datos configurar conecta automaticamente aparece iphone ios objective-c internet-connection cellular-network

iphone - moviles - Objective-C determina el tipo de red de datos del dispositivo iOS



no aparece red de datos moviles iphone (3)

Im en una aplicación que recibe datos del servidor, el problema es que cuando el usuario se conecta a cellular data (no 3G o WIFI ), demora mucho en recibir datos.

He implementado este código a partir de esta Answer pero no estoy seguro de si es efectivo o no, a veces me está dando un tipo preciso y otras no.

Aquí está mi código:

- (void)newtworkType { 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: NSLog(@"No wifi or cellular"); break; case 1: NSLog(@"2G"); break; case 2: NSLog(@"3G"); break; case 3: NSLog(@"4G"); break; case 4: NSLog(@"LTE"); break; case 5: NSLog(@"Wifi"); break; default: break; }}

¿Es esto lo mejor que puedo hacer? Intenté con el ejemplo de Apple Reachability , pero puede determinar si se puede alcanzar la capacidad de conexión a Internet o simplemente la reachabilityForLocalWiFi acceso a la red local pero eso no es útil en mi caso.

Gracias por adelantado.


Asegúrese de que la Status bar no esté oculta en su aplicación. si no está visible, siempre devolverá No wifi or cellular porque su código lee el texto en la Status bar eso es todo.

Esta es la mejor manera de resolver su problema, solo haga que la Status bar no esté oculta para que la aplicación obtenga el texto sobre el tipo de red.


Si usa iOS 7 +, puede obtener información del marco CoreTelephony siguiendo el método:

CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new]; NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);

Los valores posibles definidos que obtendrá son los siguientes: CTRadioAccessTechnologyGPRS , CTRadioAccessTechnologyEdge , CTRadioAccessTechnologyWCDMA , CTRadioAccessTechnologyLTE etc.


caso 1, con el NSLog(@"2G"); es el caso donde el teléfono está en datos celulares normales, no 3G, no 4G y no WiFi.

Lo que debe hacer es insertar el código debajo del NSLog para 2G para evitar la transferencia de datos.