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.