繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM