10 Stimmen

Feststellen, wann eine EDGE-Verbindung nach einem Verbindungsabbruch auf einem iPhone wiederhergestellt wird

Ich habe das Reachability-Beispiel von Apple in mein eigenes Projekt integriert, damit ich weiß, ob ich eine Netzwerkverbindung habe oder nicht - wenn ich keine Netzwerkverbindung habe, mache ich mir nicht die Mühe, Anfragen zu senden. Ich habe mich für die Implementierung der Statusbenachrichtigung entschieden, weil es mir einfacher erschien, die Erreichbarkeit im Hintergrund zu aktualisieren und die aktuellen Ergebnisse sofort zur Verfügung zu haben, als eine synchrone Anfrage zu starten, sobald ich eine Netzwerkverbindung herstellen möchte.

Mein Problem ist, dass ich falsche Negativmeldungen erhalte, wenn ich mich in einem EDGE-Netz befinde - das Telefon hat Verbindung, aber die App denkt, dass dies nicht der Fall ist. Soweit ich weiß, erhält man keine Benachrichtigung, wenn eine EDGE-Verbindung besteht, daher nehme ich an, dass ich die Verbindung irgendwann verloren und wiederhergestellt habe. Ein Neustart der App reicht normalerweise aus, um die Netzwerkverbindung zu sehen.

Da dies keine optimale Lösung ist, wollte ich wissen, ob noch jemand auf dieses Problem gestoßen ist und eine Lösung parat hat.

(Ich weiß nicht, ob das auch für 3G gilt; ich habe ein iPhone der ersten Generation).

14voto

Chris Lundie Punkte 6023

Die Erreichbarkeitsbenachrichtigungen schienen mir auch nicht zuverlässig zu sein, um Wi-Fi zu erkennen. Deshalb verwende ich stattdessen einfach Polling. Alle 5 Sekunden zu prüfen scheint nicht zu schaden.

- (void) checkReachability {
    BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork);

    // Do something...

    [self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0];
}

1voto

Abhijeet Punkte 63

Es gibt ein schönes Beispiel für die Erreichbarkeit im Netz. Es funktioniert wunderbar: http://servin.com/iphone/iPhone-Network-Status.html

Aber wissen Sie, wenn ich versuche, es auf meine Art und Weise zu nutzen, geht es einfach schief.

Versucht, es mit zu implementieren:

NSString *sCellNetwork;     
 NSString *sNetworkReachable;  

if (flags & kSCNetworkFlagsReachable || flags & kSCNetworkReachabilityFlagsIsWWAN)

{do it} 

 else {
   Network fail alert; 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X