2009-04-24 13 views
12

Sto cercando di determinare se è disponibile una connessione Internet su iPhone. Non importa per l'app se è wifi o EDGE o qualsiasi altra cosa.Il modo più semplice per determinare se la connessione Internet di iPhone è disponibile?

Utilizzando il codice dall'esempio SeismicXML non sembra al lavoro e il codice di esempio raggiungibilità da parte di Apple sembra eccessivo per l'applicazione ...

Esiste un modo rapido e semplice per determinare la disponibilità di rete sul i phone?

Grazie, Ben

+0

Hai trovato una risposta? – JoePasq

+0

** Passo dopo passo soluzione ** Vedere la risposta: http://stackoverflow.com/a/25498693/2459296 – Salim

risposta

0

La mia prima idea sarebbe quella di vedere se riuscivo a connettersi a Google.

7

ho capito dopo la rottura XCode una volta cercando di copiare lo SystemConfiguration.framework in ... Ecco la soluzione per tutti coloro che potrebbero essere interessati ...

Aggiungi lo SystemConfiguration.framework al progetto, fare un #import <SystemConfiguration/SystemConfiguration.h>, quindi aggiungere il seguente codice:

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 
} 

Beh, spero che questo aiuta qualcuno in ogni caso ... Mi sembra un modo comune per avere un app respinto ...

+0

È necessario essere cauti con le bandiere assumendo == 0 significa una connessione che la vostra applicazione può utilizzare . Se si osservano i valori possibili per SCNetworkConnectionFlags, non tutti indicano "accesso Internet immediato disponibile". (Http://developer.apple.com/documentation/Networking/Reference/SysConfig/SCNetwork/CompositePage.html#//apple_ref/c/tag/SCNetworkConnectionFlags) Il campione di Raggiungibilità di Apple è molto più accurato. – lfalin

9

Ho incluso Reachability.h.& .m di Apple dall'esempio Reachability, oltre al framework SystemConfiguration menzionato in precedenza, quindi aggiunto il seguente codice alla mia app, che presenta due vantaggi rispetto alla risposta di cui sopra: fornisce più informazioni e ottieni notifiche asincrone delle modifiche dello stato della rete.

Nella tua app delegato, o simili, aggiungere questo quando si avvia:

[self startReachability]; 

Quindi aggiungere questo metodo, che viene chiamata quando la rete cambia:

#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

'[auto startReachability]' - Dove viene definito questo metodo? –

1

Questa è la soluzione più rapido e semplice per il vostro problema:

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

Si tornerà YES se è collegato o NO se non lo è. Cerca solo di caricare google e se ha successo, restituisce YES.

allora si può avere un if dichiarazione con il valore di ritorno, in modo che si può buttare una notifica o quello che vuoi.

+0

Anche sporco. –

+0

stringWithContentsOfURL è ammortizzato. Quindi non funziona ora. – badweasel

24

segua seguire 3 semplici passi -

Fase 1: Include quadro "SystemConfiguration.framework" nel progetto

Fase 2: Incluso Reachability.h e raggiungibilità di Apple.m dall'esatto Reachability

Passaggio 3: Ora aggiungi questo codice ovunque nel tuo .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

^Questo, ad eccezione di Reachability, offre metodi diversi per scopi diversi: Usa raggiungibilitàWithHostName: @ "nomeutente" per verificare se è possibile raggiungere il proprio server. Usa reachabilityForInternetConnection per verificare se esiste o meno una connessione Internet; quest'ultimo sembra essere più vicino alla domanda originale qui. Non verificherei un server di terze parti, ad es. Apple.com: è un trucco. – n13

+0

Grazie mille – SampathKumar

Problemi correlati