【问题标题】:Detect if network has changed? [duplicate]检测网络是否改变? [复制]
【发布时间】:2013-03-13 07:14:14
【问题描述】:

我如何知道设备是否更改了网络?例如这个用例:

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

是否有通知应用程序,设备从 Wi-Fi A 更改为 Wi-Fi B?

【问题讨论】:

  • 我的问题可能不够具体。所以我会在这里的细节。我在后台保持我的 XMPP 套接字连接处于活动状态,我不会断开它,所以当应用程序回到前台时,我可以再次使用它,而无需重新连接。现在当用户更改网络时,例如 Wi-Fi A 到 Wi-Fi B,套接字连接现在无效。当应用程序处于后台时,可达性通知不起作用。我的应用程序中没有后台执行,所以我想,可达性并不是这个问题的真正答案。
  • 我找到的解决方案是使用网络的BSSID,当我把应用程序放在后台时保存它,然后当我把应用程序放在前台时,我检查当前的BSSID,然后如果不一样,我更新套接字连接。

标签: iphone ios objective-c


【解决方案1】:

Apple 为我们创建了一个完整的示例。它被称为可达性 (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"); 
    } 
} 

【讨论】:

【解决方案2】:

这是与 ARC 兼容的一个不错的替代方案 https://github.com/tonymillion/Reachability

【讨论】:

    【解决方案3】:

    Use Reachability in your Project Fetch the Networks Type

    SCNetworkReachability 界面可以帮助您。基本上,您创建一个所谓的可达性引用,然后在其上调用 SCNetworkReachabilityGetFlags 以获取有关连接的信息。

    【讨论】:

      【解决方案4】:

      正如其他人提到的使用可达性继承人link

      【讨论】:

        猜你喜欢
        • 2015-10-19
        • 2010-11-04
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多