Sto utilizzando correttamente Raggiungibilità per determinare lo stato della rete e per ricevere notifiche delle modifiche (ad esempio Reachability Guide for iOS 4).Come ottenere notifiche di raggiungibilità in iOS in background quando si interrompe la rete Wi-Fi?
La mia domanda non è come ottenere Raggiungibilità e funzionamento, ma piuttosto quanto segue.
Il mio AppDelegate
gestisce il materiale Raggiungibilità. L'app riceve notifiche (kReachabilityChangedNotification
) mentre l'app è in esecuzione e quando l'app è in Background (applicationDidEnterBackground:
).
L'app è progettata per ricaricare un flusso audio in riproduzione quando nota che ha perso una connessione Wi-Fi, ad es. Per testare, ho attivato e disattivato il Wi-Fi in Impostazioni e tutto ha funzionato perfettamente. Nei test del mondo reale, spesso perdo la connettività Wi-Fi quando esco dall'intervallo del punto di accesso. Ho trovato che la Raggiungibilità non mi sta aiutando troppo in questo caso. Non sono sicuro che sia perché le notifiche di Reachability non arrivano quando lo schermo è bloccato, o se Reaschability non gestisce la lenta diminuzione del segnale da un punto di accesso Wi-Fi sempre più distante, ma a prescindere non riesco a capire perché il test del mondo reale non corrisponde al caso idealizzato.
Ecco come appare il mio codice. Ho messo per ricevere le notifiche, e iniziare ad ascoltare raggiungibilità:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];
// Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
....
return YES;
}
e poi, questa è la funzione che risponde alle variazioni di connettività:
- (void)checkNetworkStatus:(NSNotification *)notice {
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}
Le notifiche vengono attraverso anche quando l'applicazione è in background, ma non nel test del mondo reale descritto sopra.
Grazie per qualsiasi aiuto.
Hai provato una combinazione di 'reachabilityForInternetConnection' e' reachabilityForLocalWifi'? –
Hai trovato una soluzione per questo? Sto vivendo un problema simile, e le soluzioni qui non sembrano aiutare o non sono quello che sto cercando. – newenglander
Non so di aver mai risolto il mio problema specifico, dato che ultimamente non ho avuto bisogno di lavorare su quel progetto. Ti sei assicurato che l'app sia in esecuzione in background con un'attività in background, secondo la raccomandazione di @ Hurden? –