【问题标题】:iOS: how to query WiFi stateiOS:如何查询 WiFi 状态
【发布时间】:2014-10-05 20:35:09
【问题描述】:

是否可以通过编程方式在 iOS 上查询 WiFi 状态(启用/禁用)?启用 WiFi 且设备未连接到任何网络时,查询应返回 true。

编辑:我知道Reachability 类提供的功能,据我了解,它无法识别启用但未连接的 WIFI 状态。 IE。以下代码将返回NetworkStatusNotReachable,这不是我需要的。

Reachability* r = [Reachability reachabilityForLocalWiFi];
NetworkStatus ns = [r currentReachabilityStatus];

【问题讨论】:

  • 使用可达性。 Apple 示例代码描述了监控不同类型网络连接的基本用例。 developer.apple.com/library/IOs/samplecode/Reachability/…
  • 如果我正确理解您的编辑,则无法查询用户是否明确启用或禁用了 WiFi。可达性将回答网络是否通过特定方法(即 Wifi)“可达”,但无法查询用户是否真的关闭了 WiFi 天线。
  • @ChrisDroukas:是的,就是这样。

标签: ios objective-c wifi


【解决方案1】:

免责声明:以下解决方案并不可靠并且不能保证它会通过 AppStore

到目前为止,我能找到的唯一可行的解​​决方案是使用 getifaddrs 函数请求和评估可用接口列表。如果 WiFi 禁用/启用/连接,该列表看起来会有所不同:

NSCountedSet * cset = [NSCountedSet new];
struct ifaddrs *interfaces;

if( ! getifaddrs(&interfaces) ) {
    for( struct ifaddrs *interface = interfaces; interface; interface = interface->ifa_next) {
        if ( (interface->ifa_flags & IFF_UP) == IFF_UP ) {
            [cset addObject:[NSString stringWithUTF8String:interface->ifa_name]];
        }
    }
}

freeifaddrs(interfaces);

return [cset countForObject:@"awdl0"] > 1 ? WIFI_ON : WIFI_OFF;

【讨论】:

  • 如果认为 awdl0 接口是 Wi-Fi Direct 接口,那么这会检查 Wi-Fi Direct 可用性吗?例如,它不应该在 iPhone 4 中工作。有人可以确认吗?
【解决方案2】:

您可以使用Reachability 进行检查。导入文件,然后你可以这样做:

Reachability *networkReachability = [Reachability  reachabilityWithHostName:@"http://google.com];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
if (networkStatus == ReachableViaWiFi) {
    //wifi
}

【讨论】:

    【解决方案3】:

    您可以使用苹果提供的可达性类here 然后检查:

    [Reachability reachabilityForLocalWiFi];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      相关资源
      最近更新 更多