2009-04-24 14 views
12

Estoy buscando para determinar si una conexión a internet está disponible en el iPhone. No importa para la aplicación si es wifi o EDGE o lo que sea.¿La manera más fácil de determinar si la conexión a internet del iPhone está disponible?

Usando el código del ejemplo SeismicXML no parecen funcionar y el código de ejemplo de accesibilidad de Apple parece excesivo para la aplicación ...

¿Hay una manera rápida y fácil para determinar la disponibilidad de red en el iPhone?

Gracias, Ben

+0

¿Has encontrado una respuesta? ** – JoePasq

+0

solución paso a paso ** Ver la respuesta: http://stackoverflow.com/a/25498693/2459296 – Salim

Respuesta

0

Mi primera idea sería la de ver si podía conectarse a google.

7

lo he descubierto después de romper XCode vez tratando de copiar el SystemConfiguration.framework en ... Aquí está la solución para cualquier persona que pueda estar interesada ...

Añadir la SystemConfiguration.framework a su proyecto, hacer una import <SystemConfiguration/SystemConfiguration.h>, a continuación, añadir el siguiente código:

SCNetworkReachabilityFlags flags; 
BOOL receivedFlags; 

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"google.com" UTF8String]); 
receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags); 
CFRelease(reachability); 

if (!receivedFlags || (flags == 0)) 
{ 
    // internet not available 
} else { 
    // internet available 
} 

Bueno, espero que esto ayude a alguien de todos modos ... Parece que una forma común de tener una aplicación rechazada ...

+0

Es necesario tener cuidado con banderas asumiendo == 0 significa una conexión que su aplicación puede utilizar . Si observa los posibles valores de SCNetworkConnectionFlags, no todos significan "acceso inmediato a Internet disponible". (Http://developer.apple.com/documentation/Networking/Reference/SysConfig/SCNetwork/CompositePage.html#//apple_ref/c/tag/SCNetworkConnectionFlags) La muestra de disponibilidad de Apple es mucho más precisa. – lfalin

9

Incluí Reachability.h & .m de Apple en su ejemplo de Accesibilidad, más el marco de configuración del sistema mencionado anteriormente, y luego agregué el siguiente código a mi aplicación, que tiene dos ventajas sobre la respuesta anterior: le brinda más información y obtiene notificaciones asincrónicas de cambios en el estado de la red.

En delegado de la aplicación, o similares, añadir este al iniciar:

[self startReachability]; 

A continuación, agregue este método, que se llama cuando los cambios en la red:

#pragma mark Reachability changed 
- (void)reachabilityChanged:(NSNotification*)aNote 
{ 
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus]; 

switch (self.remoteHostStatus) 
{ 
case NotReachable: 
    debugForComponent(kDebugMaskApp,@"Status changed - host not reachable"); 
    break; 

case ReachableViaCarrierDataNetwork: 
    debugForComponent(kDebugMaskApp,@"Status changed - host reachable via carrier"); 
    break; 

case ReachableViaWiFiNetwork: 
    debugForComponent(kDebugMaskApp,@"Status changed - host reachable via wifi");  
    break; 

default: 
    debugForComponent(kDebugMaskApp,@"Status changed - some new network status"); 
    break; 
} 
} 
+5

'[self startReachability]' - ¿Dónde se define este método? –

1

Ésta es la solución más rápida y más simple para su problema:

([NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]!=NULL)?YES:NO; 

Se volverá YES si está conectado o NO si no lo es. Simplemente intenta cargar google y si tiene éxito que devuelve YES.

Luego puede tener una declaración if con el valor de retorno, para que pueda lanzar una notificación o lo que quiera.

+0

Una manera sucia también. –

+0

stringWithContentsOfURL se deprecia. Entonces eso no funciona ahora. – badweasel

24

Seguir Siguiendo 3 sencillos pasos -

Paso 1: incluir framework "SystemConfiguration.framework" en su proyecto

Paso 2: Incluido Reachability.h y de accesibilidad de Apple.m desde el ejemplo de Accesibilidad

Paso 3: Ahora agregue este código en cualquier lugar de su .m.

Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain]; 
NetworkStatus netStatus = [wifiReach currentReachabilityStatus]; 

switch (netStatus) 
{ 
    case NotReachable: 
    { 
     NSLog(@"Access Not Available"); 
     break; 
    } 

    case ReachableViaWWAN: 
    { 
     NSLog(@"Reachable WWAN"); 
     break; 
    } 
    case ReachableViaWiFi: 
    { 
     NSLog(@"Reachable WiFi"); 
     break; 
    } 
} 
+5

^Eso, excepto que Reachability proporciona diferentes métodos para diferentes propósitos: Use reachabilityWithHostName: @ "your.hostname" para verificar si puede comunicarse con su propio servidor. Use reachabilityForInternetConnection para verificar si hay una conexión a Internet o no; el último parece estar más cerca de la pregunta original aquí. No verificaría un servidor de terceros, p. Apple.com - eso es un truco. – n13

+0

Muchas gracias – SampathKumar

Cuestiones relacionadas