当前位置:  开发笔记 > IOS > 正文

使用Reachability for Internet*或*本地WiFi?

如何解决《使用ReachabilityforInternet*或*本地WiFi?》经验,为你挑选了2个好方法。

我搜索过这个问题的答案,并没有真正解决,至少在某些方面我无法解决这个问题.

我最初只是检查Internet可达性,使用:

self.wwanReach = [Reachability reachabilityWithHostName:@"www.apple.com"];
[wwanReach startNotifer];

我现在需要支持本地WiFi连接(一般没有上网),当我发现时+reachabilityForLocalWiFi,我也注意到了+reachabilityForInternetConnection.我想我可以使用这些,而不是"www.apple.com"在那里进行硬编码,但唉,当我使用时:

self.wwanReach = [Reachability reachabilityForInternetConnection];
[wwanReach startNotifer];
self.wifiReach = [Reachability reachabilityForLocalWiFi];
[wifiReach startNotifer];

我设置的"永不"的可达性回调被调用,对于"永不"的值,最多10分钟,12分钟,15分钟左右(这只要我的耐心持续.)(用户的耐心会少得多,我确定.)切换回+ reachabilityWithHostName:在几秒钟内工作.我也单独尝试了每个"对",以防两个通知程序同时出现问题,但没有区别.

那么:确定Internet/WWAN或本地Wifi网络(一个或两个)的可达性的适当方法是什么?

[此特定用例是连接到Mac mini计算机到计算机网络的iPhone或iPad; 我确定其他情况适用.]



1> Bron Davies..:

使用此功能检查wifi是否已打开

- (BOOL)isWifiOn {
    Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];

    NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
    return (netStatus==ReachableViaWiFi);
}

类似的代码可用于检查reachabilityForInternetConnection,但您必须检查

(netStatus==ReachableViaWiFi)

如果你关心它是通过wifi和

(netStatus==ReachableViaWWAN)

如果你关心它在WWAN上面



2> hujunfeng..:

我遇到了同样的问题.我最终发现,对于WWAN或WiFi可达性,只有在网络发生变化时才会调用通知回调.

换句话说,在创建可访问性对象后立即检查当前的可访问性.不要等待通知,因为通知只会在下次网络更改发生时发布.

对于Internet/WWAN:

self.wwanReach = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [wwanReach currentReachabilityStatus];
if (networkStatus == ReachableViaWWAN) {
    // do something
}

对于WiFi:

self.wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus networkStatus = [wifiReach currentReachabilityStatus];
if (networkStatus == ReachableViaWiFi) {
    // do something
}

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有