Escrito por
Antonio Rodríguez en
Uncategorized el
Nov 23rd, 2008 |
Sin Comentarios

En muchas ocasiones, será conveniente comprobar, antes de realizar cualquier otra acción, que tipo de conexión a Internet tengo disponible, WIFI, 3G, celular, etc...
En las pruebas que previamente he realizado, he comprobado que ante la situación de no tener conexión WIFI ó 3G, el dispositivo utiliza la conexión celular del movil (la utilizada para hacer y recibir llamadas), para conectarse a Internet, eso si, a una velocidad mucho más inferior que las otras.
Por lo tanto, el siguiente fragmento de código, gracias al framework SystemConfiguration.framework, nos permite conocer si tenemos conexión:
C++:
-
SCNetworkReachabilityFlags flags;
-
-
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, @"http://www.iphonesoftware.es");
-
-
BOOL gotFlags = SCNetworkReachabilityGetFlags(reachability, &flags);
-
-
CFRelease(reachability);
-
-
if (!gotFlags) {
-
-
bConnectionIsReachable = NO;
-
-
}
-
-
else
-
-
{
-
-
BOOL isReachable = flags & kSCNetworkReachabilityFlagsReachable;
-
-
BOOL noConnectionRequired = !(flags & kSCNetworkReachabilityFlagsConnectionRequired);
-
-
if ((flags & kSCNetworkReachabilityFlagsIsWWAN)) {
-
-
noConnectionRequired = YES;
-
-
}
-
-
bConnectionIsReachable = (isReachable && noConnectionRequired) ? YES : NO;
-
-
}
Para empezar, crearemos una conexión mediante SCNetworkReachabilityCreateWithName, la cual será examinada para establecer si tenemos conexión o no. Después, comprobaremos el estado mediante una serie de flags, utilizando la función SCNetworkReachabilityGetFlags. Dichos flags serán evaluados comparando su valor con alguno de los del siguiente enumerado:
C++:
-
enum {
-
-
kSCNetworkReachabilityFlagsTransientConnection = 1<<0,
-
-
kSCNetworkReachabilityFlagsReachable = 1<<1,
-
-
kSCNetworkReachabilityFlagsConnectionRequired = 1<<2,
-
-
kSCNetworkReachabilityFlagsConnectionAutomatic = 1<<3,
-
-
kSCNetworkReachabilityFlagsInterventionRequired = 1<<4,
-
-
kSCNetworkReachabilityFlagsIsLocalAddress = 1<<16,
-
-
kSCNetworkReachabilityFlagsIsDirect = 1<<17,
-
-
kSCNetworkReachabilityFlagsIsWWAN = 1<<18,
-
-
};
Desactiva la conexión WIFI, 3G, ó incluso el operador de tu iPhone para realizar las pruebas.
Leave a Reply