項目暫時告一段落,整理下大概功能及遇到的問題。
需求:給WiFi對講機配網
大概流程:1.獲取本機連接的WiFi名稱 2.將WiFi名稱和密碼發送給設備
1.1 開啟WiFi功能權限
如下圖,點擊+Capability,選擇添加 Access WiFi Information
開啟WiFi功能.png
1.2 獲取定位權限
iOS13后需要開啟定位權限后,才能獲取WiFi名稱,記得在info.plist添加相應描述:
Privacy - Location Always and When In Use Usage Description
Privacy - Location Always Usage Description
Privacy - Location When In Use Usage Description
- (void)openUserLocationAuth {
if (![self getUserLocationAuth]) {
CLLocationManager *locationManager = [[CLLocationManager alloc]init];
[locationManager requestWhenInUseAuthorization];
}
}
- (BOOL)getUserLocationAuth {
BOOL result = NO;
switch ([CLLocationManager authorizationStatus]) {
case kCLAuthorizationStatusNotDetermined:
break;
case kCLAuthorizationStatusRestricted:
break;
case kCLAuthorizationStatusDenied:
break;
case kCLAuthorizationStatusAuthorizedAlways:
result = YES;
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
result = YES;
break;
default:
break;
}
return result;
}
1.3 獲取WiFi名稱
#import<SystemConfiguration/CaptiveNetwork.h>
- (NSString *)getSSID {
NSDictionary *netInfo = [self fetchSSIDInfo];
NSString *ssidStr = [netInfo objectForKey:@"SSID"];
return ssidStr;
}
/**
* 獲取SSID信息
*
* @return id
*/
- (id)fetchSSIDInfo {
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;
}
}
return info;
}
注:當前方法僅能獲取手機連接的WiFi,如果想獲得掃描的WiFi列表,參考如下:
獲得WiFi列表