iOS:如何查询 WiFi 状态

Posted

技术标签:

【中文标题】iOS:如何查询 WiFi 状态【英文标题】:iOS: how to query WiFi state 【发布时间】: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:是的,就是这样。 【参考方案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];

【讨论】:

以上是关于iOS:如何查询 WiFi 状态的主要内容,如果未能解决你的问题,请参考以下文章

如何避免iOS中的重复通知?

如何知道已连接的WiFi的密码?

如何判断“移动网络数据”是启用还是禁用(即使通过 WiFi 连接)?

WiFi打开时如何在iPhone中获取移动数据状态

状态栏如何修改字体颜色,电池颜色,WIFI颜色啊

如何查看无线上网流量