判断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