2013-03-13 10 views
1

Comment savoir si l'appareil a changé de réseau? Par exemple, avec ce cas d'utilisation:Détecter si le réseau a changé?

  1. utilisateur se connecte à un réseau Wi-Fi A.
  2. utilisateur démarre mon application.
  3. L'utilisateur se connecte au Wi-Fi B. (ou même 3G)
  4. L'utilisateur restaure l'application.

Y at-il un moyen d'avertir l'application que l'appareil est passé de Wi-Fi A à Wi-Fi B?

+0

je pourrais ai pas été spécifique avec ma question assez. Donc, je vais les détails ici. Je garde ma connexion de socket XMPP en vie en arrière-plan, je ne la déconnecte pas donc quand l'application est ramenée au premier plan, je peux juste l'utiliser à nouveau, et aucune reconnexion n'est nécessaire. Maintenant, lorsque l'utilisateur change de réseau, comme Wi-Fi A à Wi-Fi B, la connexion par socket est maintenant invalide. Lorsque l'application est en arrière-plan, les notifications d'accessibilité ne fonctionnent pas. Il n'y a pas d'exécution en arrière-plan dans mon application, donc je suppose, Reachability n'est pas vraiment la réponse à cela. – jakerz

+1

La solution que j'ai trouvée pour cela est en utilisant le BSSID du réseau, et l'enregistrer quand je mets l'application en arrière-plan, puis quand je mets l'application au premier plan, je vérifie le BSSID actuel, et si ce n'est pas la même chose renouveler la connexion socket. – jakerz

Répondre

3

Apple a été assez gentil pour créer un échantillon complet pour nous. Il est appelé Reachability (Apple link). Voici l'essentiel de celui-ci:

Dans .h fichier:

// declare Reachability, you no longer have a singleton but manage instances 
Reachability* reachability; 

Dans le fichier .m:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil]; 
reachability = [Reachability reachabilityForInternetConnection]; 
[reachability startNotifier]; 
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 
if(remoteHostStatus == NotReachable) 
{ 
    NSLog(@"no"); 
} 
else if (remoteHostStatus == ReachableViaWiFiNetwork) 
{ 
    NSLog(@"wifi"); 
} 
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) 
{ 
    NSLog(@"cell"); 
} 
..... 

- (void) handleNetworkChange:(NSNotification *)notice 
{ 
    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 
    if(remoteHostStatus == NotReachable) 
    { 
     NSLog(@"no"); 
    } 
    else if (remoteHostStatus == ReachableViaWiFiNetwork) 
    { 
     NSLog(@"wifi"); 
    } 
    else if (remoteHostStatus == ReachableViaCarrierDataNetwork) 
    { 
     NSLog(@"cell"); 
    } 
} 
+0

Cela semble avoir été plagié directement à partir de https://iostipsntricks.wordpress.com/2011/06/21/how-to-detect-handle-changes-in-network-from-3g-to-edge-to-wifi -in-vos-applications-iOS / – Alnitak

0

Comme mentionné par les autres Utilisez la joignabilité Heres link

Questions connexes