在升级到iOS13以后忽然发现无法获取WiFi名称(SSID),在iOS13以下我们可以通过下面的方法获取当前所连WiFi的名称等信息
//引入系统提供的官方库
#import <SystemConfiguration/CaptiveNetwork.h>
/*
获取当前WiFi的账号
*/
+ (NSString*)getWifiList{
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
id info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSLog(@"%@ => %@", ifnam, info); //单个数据info[@"SSID"]; info[@"BSSID"];
if (info && [info count]) {
return [NSToolObject isEmptyOrNull:info[@"SSID"]] ? @"" : info[@"SSID"];
}
}
return @"";
}
可是在升级几iOS13这个方法就不好用了,而在iOS12还是依然可以的。那么我们要如何获取WiFi呢?
在升级到iOS13以后我们要获取当前所连WiFi需要打开定位服务
首先我们在.plist中加入一对新的键值对
//仅当APP使用期间才可使用
Privacy - Location When In Use Usage Description
接下来我们要在使用获取WiFi的地方打开定位。
//引入定位官方库
#import <CoreLocation/CoreLocation.h>
//开启定位
- (void)startLocationManager{
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager requestWhenInUseAuthorization];
}
可是如果用户不打开定位有的地方是不可以使用的,所以我们要写一个判断定位权限是否开启的方法
- (BOOL)determineWhetherTheAPPOpensTheLocation{
if ([CLLocationManager locationServicesEnabled] && ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse || [CLLocationManager authorizationStatus] ==kCLAuthorizationStatusNotDetermined || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized)) {
return YES;
} else {
return NO;
}
}
通过这个我们就可以再次获取到当前所连WiFi,当然iOS13以下可以不用打开,看大家如何使用