1. 程式人生 > 實用技巧 >iOS 開發,判斷手機WiFi是否開啟及獲取WiFi名稱

iOS 開發,判斷手機WiFi是否開啟及獲取WiFi名稱

判斷手機WiFi是否開啟

- (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;
}

獲取WiFi名稱

- (NSString *)getWiFiName {
    if (@available(iOS 13.0, *)) {
        //使用者明確拒絕,可以彈窗提示使用者到設定中手動開啟許可權
        if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
            NSLog(@"User has explicitly denied authorization for this application, or location services are disabled in Settings.");
            //使用下面介面可以開啟當前應用的設定頁面
            //[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
            return nil;
        }
        CLLocationManager* cllocation = [[CLLocationManager alloc] init];
        if(![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
            //彈框提示使用者是否開啟位置許可權
            [cllocation requestWhenInUseAuthorization];
            usleep(50);
            //遞迴等待使用者選選擇
            //return [self getWifiSsidWithCallback:callback];
        }
    }
    NSString *wifiName = nil;
    CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();
    if (!wifiInterfaces) {
        return nil;
    }
    NSArray *interfaces = (__bridge NSArray *)wifiInterfaces;
    for (NSString *interfaceName in interfaces) {
        CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));

        if (dictRef) {
            NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;
            NSLog(@"network info -> %@", networkInfo);
            wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];
            CFRelease(dictRef);
        }
    }

    CFRelease(wifiInterfaces);
    return wifiName;
}
注意
需要引入的標頭檔案
#import <ifaddrs.h>
#import <net/if.h>
#import <SystemConfiguration/CaptiveNetwork.h>
info.plist 檔案需要配置獲取的許可權
Privacy - Location Always Usage Description
Privacy - Location When In Use Usage Description

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:196800191,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!

iOS 13 以後
獲取WiFi名稱,必須要先允許獲取定位資訊

原文作者:深海謝先生

原文地址:https://blog.csdn.net/m0_50752541/article/details/110481171?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160741070019215668868668%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160741070019215668868668&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-6-110481171.pc_search_result_cache&utm_term=iOS%E5%BC%80%E5%8F%91