// // Copyright © 2020 dahua. All rights reserved. // #import "LCNetTool.h" #import #import #import @interface LCNetTool () @property (nonatomic, strong) CLLocationManager *locManager; @property (nonatomic, copy) void (^ netToolSSID)(NSString *ssid); @end static LCNetTool *tool = nil; @implementation LCNetTool + (instancetype)shareManager { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ tool = [LCNetTool new]; }); return tool; } - (CLLocationManager *)locManager { if (!_locManager) { _locManager = [[CLLocationManager alloc] init]; } return _locManager; } - (void)lc_CurrentWiFiName:(void (^)(NSString *ssid))block { self.netToolSSID = block; [self locManager]; if (@available(iOS 13.0, *)) { //用户明确拒绝,可以弹窗提示用户到设置中手动打开权限 if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) { //使用下面接口可以打开当前应用的设置页面 [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil]; return; } if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) { //弹框提示用户是否开启位置权限 [self.locManager requestWhenInUseAuthorization]; return; } if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) { [self getSSID]; return; } } else { [self getSSID]; } } - (void)getSSID { NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces(); id info = nil; for (NSString *ifnam in ifs) { info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); if (info && [info count]) { break; } } NSString * ssid = info[@"SSID"]; if (self.netToolSSID) { self.netToolSSID(ssid ? ssid : @""); } } - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) { //再重新获取ssid [self getSSID]; } } + (LCNetStatus)lc_CurrentNetStatus { AFNetworkReachabilityStatus status = [[AFNetworkReachabilityManager sharedManager] networkReachabilityStatus]; NSLog(@""); return (LCNetStatus)status; } + (void)lc_ObserveNetStatus:(void (^)(LCNetStatus status))netStatus { //创建网络监听对象 AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //开始监听 [manager startMonitoring]; //监听改变 [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusUnknown: case AFNetworkReachabilityStatusNotReachable: { netStatus(LCNetStatusOFFLine); [[NSNotificationCenter defaultCenter] postNotificationName:@"NETCHANGE" object:@(LCNetStatusOFFLine) userInfo:nil]; } break; case AFNetworkReachabilityStatusReachableViaWWAN: { netStatus(LCNetStatusWWAN); [[NSNotificationCenter defaultCenter] postNotificationName:@"NETCHANGE" object:@(LCNetStatusWWAN) userInfo:nil]; } case AFNetworkReachabilityStatusReachableViaWiFi: { netStatus(LCNetStatusWiFi); [[NSNotificationCenter defaultCenter] postNotificationName:@"NETCHANGE" object:@(LCNetStatusWiFi) userInfo:nil]; } break; } }]; }); } @end