iOS:如何查询 WiFi 状态
Posted
技术标签:
【中文标题】iOS:如何查询 WiFi 状态【英文标题】:iOS: how to query WiFi state 【发布时间】:2014-10-05 20:35:09 【问题描述】:是否可以通过编程方式在 ios 上查询 WiFi 状态(启用/禁用)?启用 WiFi 且设备未连接到任何网络时,查询应返回 true。
编辑:我知道Reachability
类提供的功能,据我了解,它无法识别启用但未连接的 WIFI 状态。 IE。以下代码将返回NetworkStatus
NotReachable
,这不是我需要的。
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 状态的主要内容,如果未能解决你的问题,请参考以下文章