2013-03-13 59 views
1

我如何知道设备是否改变了网络?例如与这个用例:检测网络是否改变?

  1. 用户连接到Wi-Fi A.
  2. 用户开始我的应用程序。
  3. 用户连接到Wi-Fi B.(甚至3G)
  4. 用户恢复应用程序。

无论如何要通知应用程序,设备已从Wi-Fi A更改为Wi-Fi B吗?

+0

我可能还没有得到具体的我的问题就好了。所以我会在这里的细节。我保持我的XMPP套接字连接在后台保持活动状态,我不断开它,所以当应用程序返回前台时,我可以再次使用它,并且不需要重新连接。现在,当用户更改网络时,如Wi-Fi A到Wi-Fi B,套接字连接现在无效。当应用程序处于后台时,可达性通知不起作用。在我的应用程序中没有后台执行,所以我猜,Reachability并不是真正的答案。 – jakerz 2013-03-14 02:31:47

+1

我找到的解决方案是通过使用网络的BSSID,并在将应用程序放在后台时保存它,然后当我将应用程序放在前台时,我检查当前的BSSID,如果它不相同,我续订套接字连接。 – jakerz 2013-03-14 02:33:47

回答

3

苹果已经足够好为我们创建一个完整的样本。它被称为Reachability(Apple link)。下面是它的要点:

在.h文件中:

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

在.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

这似乎是从https://iostipsntricks.wordpress.com/2011/06/21/how-to-detect-handle-changes-in-network-from-3g-to-edge-to-wifi直接剽窃-in-您-IOS,应用/ – Alnitak 2016-06-28 17:28:16