Wifi网络更改通知

时间:2017-06-14 05:47:11

标签: ios objective-c networking xcode8

我正在使用Reachability演示来获取网络状态更改通知,并且通过使用此代码,我可以在打开/关闭wifi时获得回调,但如果我正在将wifi连接从一个网络更改为另一个网络,那么我无法获得网络变更的回调。      正如我搜索代码并发现这可能是通过使用以下回调,但我不知道如何在我的代码中使用它

typedef void (*SCNetworkReachabilityCallBack)   (
                    SCNetworkReachabilityRef            target,
                    SCNetworkReachabilityFlags          flags,
                    void                 *  __nullable  info
                    );

任何人都可以帮我用示例代码获取网络更改回调吗?

3 个答案:

答案 0 :(得分:0)

This帖子可以帮到你。 正如他所说,每当网络发生变化/网络中断或网络闪烁时,Reachability类将触发ReachabilityChangedNotification,最终将调用此用户定义的方法checkForReachability。所以,你可以在这里处理任何事情。

答案 1 :(得分:0)

如果您使用此Reachability文件,则很容易。 在viewWillAppear

中添加一个Observer
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityDidChange:) name:kReachabilityChangedNotification object:nil];

实现观察者方法

- (void)reachabilityDidChange:(NSNotification *)notification {
    Reachability *reachability = (Reachability *)[notification object];

    if ([reachability isReachable] && [reachability isReachableViaWiFi]) {
        NSLog(@"Reachable via Wifi");
    } 
}

已更新

在Reachability处理程序的Network change completion块中添加以下代码。通过将SCNetworkReachabilityFlag作为参数发送给方法。

-(BOOL)isReachableViaWiFi :(SCNetworkReachabilityFlags)flags {

        // Check we're reachable
        if((flags & kSCNetworkReachabilityFlagsReachable))
        {
            // Check we're NOT on WWAN
            if((flags & kSCNetworkReachabilityFlagsIsWWAN))
            {
                return NO;
            }
            return YES;
        }
     return NO;
}

答案 2 :(得分:0)

添加观察员: - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus :) name:kReachabilityChangedNotification object:nil];

-(void) checkNetworkStatus:(NSNotification *)notice
{
    // called after network status changes
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    if(internetStatus == NotReachable)
    {

    }
    else if([internetReachable connectionRequired])
    {
    }
}