![](/img/trans.png)
[英]How to detect loss of internet reachability when wifi source loses connection?
[英]Using Reachability for Internet *or* local WiFi?
我搜索过这个问题的答案,并没有真正解决,至少在某些方面我无法解决。
我最初只是检查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; 我确定其他情况适用。]
使用此功能检查wifi是否已打开
- (BOOL)isWifiOn {
Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
return (netStatus==ReachableViaWiFi);
}
类似的代码可用于检查reachabilityForInternetConnection,但您必须检查
(netStatus==ReachableViaWiFi)
如果你关心它是通过wifi和
(netStatus==ReachableViaWWAN)
如果你关心它在WWAN上面
我遇到了同样的问题。 我最终发现,对于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
}
来自apple的可访问性示例向您展示了如何使用通知,这是一个事件推送模型并且应该是高效的,但我发现通知对我来说并不总是正常工作。 有时他们不会开火,有时他们会提供错误的信息。 所以我最终用一个2秒的重复计时器进行轮询,并用上面stinkbutt描述的程序检查wifi。 这是计时器实现的一个很好的参考 。
我不确定这是不是你的问题,但我注意到当你调用startNotifier 时这很重要。 我有一个类似的问题,从来没有收到通知(但是“从不”的值更短 - 我想我不是那么有用),直到我将startNotifier调用移动到某些UI代码,特别是applicationDidFinishLaunching。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.