判断WiFi是否连接可以使用Reachability进行判断,那么WiFi是否打开应该怎么判断呢?
下面是两种完全基于不同思路的方法:
方法一:
使用SystemConfiguration.framework 库进行判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# import <ifaddrs.h> # import <net/ if .h> # import <SystemConfiguration/CaptiveNetwork.h> - (BOOL) isWiFiEnabled { 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]]; } } } return [cset countForObject:@ "awdl0" ] > 1 ? YES : NO; } |
方法二:
使用KVC对StatusBar进行判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
- (BOOL)isWiFiConnected { UIApplication *app = [UIApplication sharedApplication]; NSArray *children = [[[app valueForKeyPath:@ "statusBar" ] valueForKeyPath:@ "foregroundView" ] subviews]; //获得到网络返回码 for (id child in children) { if ([child isKindOfClass:NSClassFromString(@ "UIStatusBarDataNetworkItemView" )]) { int netType = [[child valueForKeyPath:@ "dataNetworkType" ] intValue]; NSLog(@ "type:%@" ,@(netType)); if (netType == 1 ) { NSLog(@ "2G" ); return NO; } else if (netType == 2 ) { NSLog(@ "3G" ); return NO; } else if (netType == 3 ) { NSLog(@ "4G" ); return NO; } else if (netType == 5 ){ NSLog(@ "Wifi" ); return YES; } // 1,2,3,5 分别对应的网络状态是2G、3G、4G及WIFI。(需要判断当前网络类型写个switch 判断就OK) } } NSLog(@ "not open network or no net work" ); return NO; } |
实际上,方法二也是对网络连接状态的判断,不能判断WiFi是否打开。不同的网络连接状态下,StatusBar展示不同的图标,当WiFi打开而没连接时,方法二得到的结果依然会是NO。
以上所述是小编给大家介绍的判断iPhone的WiFi是否打开的两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/sinat_25544827/article/details/53288254