good

IOS 定位之判断是否打开wifi

2017-08-23  本文已影响195人  leonardni

最近在做一个打开车类软件,当然打车软件离不开地图了,地图定位基本上都是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硬件开关是否打开。

上一篇下一篇

猜你喜欢

热点阅读