我已经搜索了这个问题的答案,但它并没有得到真正的解决,至少没有达到我能让它发挥作用的程度。
我最初只检查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:在几秒钟内工作。我还分别尝试了每个“对”,以防两个通知程序同时出现问题,但这并没有什么区别。
因此:确定到因特网/WWAN或本地Wifi网络(一个或两者)的可达性的适当方法是什么?
这个特殊的用例是连接到Mac微型计算机到计算机网络的iPhone或iPad;我相信其他情况也适用。
发布于 2010-11-15 16:30:42
使用此函数检查wifi是否打开。
- (BOOL)isWifiOn {
Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
return (netStatus==ReachableViaWiFi);
}类似的代码可以用于检查reachabilityForInternetConnection,但您必须检查
(netStatus==ReachableViaWiFi)如果你关心的是无线网络
(netStatus==ReachableViaWWAN)如果你在乎它已经过去了
发布于 2012-02-20 08:37:23
我也遇到了同样的问题。最后我发现,对于WWAN或WiFi可达性,只有在发生网络更改时才会调用通知回调。
换句话说,在创建可达对象后立即检查当前可达性。不要等待通知,因为只有在下一次网络更改发生时才会发布通知。
互联网/广域网:
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
}发布于 2011-09-30 02:06:59
来自apple的可达性示例向您展示了如何使用通知,这是一种事件推送模型,被认为是有效的,但我发现通知并不总是对我有效。有时他们不会开火,有时他们会提供错误的信息。所以我用了2秒的重复计时器来进行轮询,然后用上面的一个described by stinkbutt程序来检查wifi。这是一个good reference for timer implementation。
https://stackoverflow.com/questions/2647855
复制相似问题