我搜索过这个问题的答案,并没有真正解决,至少在某些方面我无法解决这个问题.
我最初只是检查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 }