代码之家  ›  专栏  ›  技术社区  ›  randallmeadows

使用互联网*或*本地WiFi的可达性?

  •  11
  • randallmeadows  · 技术社区  · 16 年前

    我最初只检查互联网的可访问性,使用:

    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];
    

    我设置了“never”的可达性回调被调用,值为“never”的时间长达10、12、15分钟左右(这是我耐心等待的时间)。(我敢肯定,用户的耐心会大大降低。)切换回+reachabilityWithHostName:只需几秒钟即可工作。我还分别尝试了每个“对”,以防同时有两个通知程序出现问题,但这没有什么区别。

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

    [这个特殊的用例是一个iPhone或iPad连接到Mac迷你计算机到计算机网络;我确信其他情况也适用。]

    4 回复  |  直到 9 年前
        1
  •  21
  •   Bron Davies David Desmaisons    15 年前

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

    - (BOOL)isWifiOn {
        Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
    
        NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
        return (netStatus==ReachableViaWiFi);
    }
    

    (netStatus==ReachableViaWiFi)
    

    如果你介意的话,它是通过wifi和

    (netStatus==ReachableViaWWAN)
    

    如果你在乎的话,一切都结束了

        2
  •  7
  •   Junfeng    14 年前

    我也遇到了同样的问题。最后我发现,对于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
    }
    
        3
  •  1
  •   Community Mohan Dere    9 年前

    apple的可达性示例向您展示了如何使用通知,这是一种事件推送模型,应该是高效的,但是我发现通知并不总是对我正常工作。有时他们不会开火,有时他们会提供错误的信息。所以我用一个2秒的重复计时器进行投票,然后用一个类似的程序检查wifi described by stinkbutt good reference for timer implementation .

        4
  •  0
  •   Eric Smith    15 年前

    什么时候 你叫startNotifier。在将startNotifier调用移到某个UI代码(特别是applicationdFinishLaunching)之前,我也遇到过一个类似的问题,即从未接收到通知(但“never”的值较短——我想我没有收到通知)。

    推荐文章