¿Tengo conexión a Internet?
23 November 2008

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:
[cpp]
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;
}
[/cpp]
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:
[cpp]
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,
};
[/cpp]
Desactiva la conexión WIFI, 3G, ó incluso el operador de tu iPhone para realizar las pruebas.

Deja un comentario