Wifi 网络更改通知

Wifi-Network Changed Notification

我正在使用 Reachability 演示来获取网络状态更改通知,并且通过使用此代码,当 wifi 为 on/off 时,我可以获得回调,但是如果我从一个更改 wifi 连接网络到另一个然后我无法获得网络更改的回调。 因为我搜索了代码,发现可以通过使用以下回调来实现,但我不知道如何在我的代码中使用它

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

谁能帮我用示例代码获得网络更改回调?

This post 可能对你有帮助。 正如他所说,每当网络 change/network 中断或网络闪烁时,可达性 class 将触发 ReachabilityChangedNotification,最终将调用此用户定义的方法 checkForReachability。所以,你可以在这里处理任何事情。

如果您正在使用这个 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");
    } 
}

已更新

在可达性处理程序的网络更改完成块中添加以下代码。通过将 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;
}

添加观察者:- [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@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])
    {
    }
}