最近在做一个打开车类软件,当然打车软件离不开地图了,地图定位基本上都是WiFI+基站,所以把WiFi打开定位会更准备,需要判断wifi开关是否打开。其代码:
WLDeviceStateInfo.h
#import <Foundation/Foundation.h>
@interface WLDeviceStateInfo : NSObject
/**
* WiFi开关是否打开
*
* @return 状态
*/
+ (BOOL)isWiFiEnabled;
@end
WLDeviceStateInfo.m
#import <ifaddrs.h>
#import <net/if.h>
#import <SystemConfiguration/CaptiveNetwork.h>
@implementation WLDeviceStateInfo
+ (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;
}
@end
根据此作判断,作出相应的UI提示:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
BOOL isWIFI = [self isWiFiEnabled];
if (!isWIFI) {//如果WiFi没有打开,作出弹窗提示
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//自己封装的一个AlertView
[self showWIFTRemendWithTittle:@"打开wifi提高定位准确度,以便司机更快接到您。" Tittle1:@"是否现在开启?" okTittle:@"开启" isHide:NO];
});
}
});
使用AFN的AFNetworkReachabilityManager只是监测网络状态,换句话,就是检测使用的网络是移动网络、WiFi或者是未知�网络,而并不能判断WiFi硬件开关的打开。使用上面的方法判断WiFi硬件开关是否打开。
网友评论