检测网络是否已更改?

时间:2013-03-13 07:14:14

标签: iphone ios objective-c

我如何知道设备是否更改了网络?例如,使用此用例:

  1. 用户连接至Wi-Fi A.
  2. 用户启动我的应用。
  3. 用户连接到Wi-Fi B.(甚至是3G)
  4. 用户恢复应用
  5. 是否有通知应用,设备已从Wi-Fi A更改为Wi-Fi B?

4 个答案:

答案 0 :(得分:3)

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"); 
    } 
} 

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Use Reachability in your Project Fetch the Networks Type

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

答案 3 :(得分:0)

如其他人所述,使用可达性是link