1. 程式人生 > >iOS開發:獲取系統WiFi名稱,WiFi列表,WiFi強度,WiFi設定密碼,WiFi副標題標籤

iOS開發:獲取系統WiFi名稱,WiFi列表,WiFi強度,WiFi設定密碼,WiFi副標題標籤

      前段時間在開發藍芽功能,藍芽功能開發結束之後最近又在開發WiFi功能。WiFi功能也算簡單,主需要匯入使用蘋果系統自帶的框架即可,僅僅單純的獲取手機當前連線的WiFi名稱,或者獲取手機系統顯示的WiFi列表,那就so easy了。這裡我介紹一下WiFi開發主要的步驟和流程,一些其他的使用細節不再一一闡述。

蘋果在iOS9.0以後提供了獲取WiFi列表的API,但是需要開發人員主動發郵件給蘋果,等待稽核通過之後開啟獲取WiFi列表許可權才能使用;但是在iOS9.0之前,只能獲取到手機當前連線的WiFi名稱等資訊。

一、iOS9.0之前獲取WiFi許可權

1、匯入標頭檔案

        #import<SystemConfiguration/CaptiveNetwork.h>

2、獲取手機當前連線的WiFi資訊的方法

//獲取手機當前連線WiFi資訊

- (NSString *)getWifiName {

    NSString *wifiName = nil;

    CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();

    if (!wifiInterfaces) {

        return @"未知";

    }

    NSArray *interfaces = (__bridge NSArray *)wifiInterfaces;

    for (NSString *interfaceName in interfaces) {

        CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));

        if (dictRef) {

            NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;

            wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];

            CFRelease(dictRef);

        }

    }

    CFRelease(wifiInterfaces);

    return wifiName;

}

3、直接使用第2步的方法,進一步操作


        比如,這裡我直接獲取使用WiFi的名字,然後賦值給UItextfieldself.networkTF.text = [self getWifiName];

二、iOS9.0之後獲取WiFi許可權

       iOS9.0之後獲取WiFi許可權需要以下幾個主要步驟:

1、向 Apple 申請開發 Network Extension 許可權;

       寫封郵件給 [email protected] ,向蘋果要開發 Network Extension 的許可權。申請郵件內容如下所示,僅供參考:

Hi, I am a personal developer on ios9, I am using xcode8.0 to develop app, AppleID:XXXXXXXXXX, I want to get SSID and BSSID and RSSI by scanning near WiFi, I hope to get the NetworkExtension permission, please approve!

蘋果收到郵件後會自動回覆郵件,然後根據蘋果回覆的郵件提供的連結,開啟連線根據選項逐一填寫,然後提交之後14天左右就可以收到蘋果的確認回覆郵件。

2、申請包含 Network Extension 的描述檔案;


     申請獲取WiFi許可權通過之後,需要進入開發者賬號裡面配置建立Network Extension的描述檔案,配置成功之後點選下載,下載完成雙擊開啟描述檔案。

3、配置 Info.plist


     開啟專案,在XcodeInfo.plistRequired background modes 新增一個 network-authentication(item)

4、配置 entitlements


     在XcodeInfo.plistEntitlements File下新增一個鍵值對: com.apple.developer.networking.HotspotHelper -> YES

5iOS 獲取 Wifi 列表程式碼實現;

     匯入標頭檔案:

#import <NetworkExtension/NetworkExtension.h>  

      //實現部分

- (void)getWifiList {
if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {return;}
dispatch_queue_t queue = dispatch_queue_create("com.leopardpan.HotspotHelper", 0);
[NEHotspotHelper registerWithOptions:nil queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
//kNEHotspotHelperCommandTypeFilterScanList:表示掃描到 Wifi 列表資訊。
if(cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) {
//NEHotspotNetwork 裡有如下資訊:SSIDWifi 名稱;BSSID:站點的 MAC 地址;signalStrength Wifi訊號強度,該值在0.0-1.0之間;secure:網路是否安全 (不需要密碼的 Wifi,該值為 false)autoJoined裝置是否自動連線該 Wifi,目前測試自動連線以前連過的 Wifi 的也為 false justJoined:網路是否剛剛加入;chosenHelperHotspotHelper是否為網路的所選助手
for (NEHotspotNetwork* network  in cmd.networkList) {
NSLog(@“+++++%@“,network.SSID);
}
}
}];

}

6、獲取Wifi列表回撥


以上的五個步驟操作之後,執行專案,會發現沒有WiFi列表的回撥,那是因為沒有重新整理WiFi列表,這時候就需要你手動開啟手機系統設定—>WLAN—>系統WiFi列表加載出來的時候,上面的程式碼才會執行回撥,才獲取到WiFi列表。

三、代理方法

#pragma mark —Register a Hotspot Helper—

+ (BOOL)registerWithOptions:(NSDictionary*)options queue:(dispatch_queue_t)queue handler:(NEHotspotHelperHandler)handler

@param options

kNEHotspotHelperOptionDisplayName WIFI註釋tag字串// 這裡設定的內容將會在WiFi列表中每個WiFi下邊展示

@param queue dispatch_queue_t 用來呼叫handleblock

@param handler NEHotspotHelperHandler block 用於執行處理helper commands.

@return 註冊成功為YES, 否則NO.

@discussion 這個API一旦呼叫成功,應用程式有資格在後臺啟動,並參與各種熱點相關的功能。當應用程式啟動此方法,應該呼叫一次,再次呼叫它,就不會產生影響,並且返回NO

#pragma mark —Manage Hotspot Networks—

+ (BOOL)logoff:(NEHotspotNetwork *)network

@param network 對應當前關聯的WiFi網路NEHotspotNetwork

@return 登出命令已成功進入佇列為YES, 否則NO.

@discussion 呼叫這個方法使kNEHotspotHelperCommandTypeLogoff型的NEHotspotHelperCommand嚮應用程式發出的“handler”模組,網路引數須符合當前關聯的WiFi網路,必須來自對NEHotspotHelperCommand網路屬性或者方法supportedInterfaces

+ (NSArray *)supportedNetworkInterfaces

@return 如果沒有網路介面被管理就返回nil,否則就返回NEHotspotNetwork物件陣列。

@discussion 每個網路介面由NEHotspotNetwork物件表示,當前返回的陣列包含一個NEHotspotNetwork物件,代表Wi-Fi介面。

四、具體實現呼叫的方法,獲取wifi列表,並給指定ssid做標記

- (void)getWifiList {

    NSMutableDictionary* options = [[NSMutableDictionary alloc] init];

    [options setObject:@“上網” forKey:kNEHotspotHelperOptionDisplayName];

    dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", NULL);

    BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {

        NEHotspotNetwork* network;

        NSLog(@"COMMAND TYPE:   %ld", (long)cmd.commandType);

        [cmd createResponse:kNEHotspotHelperResultAuthenticationRequired];

        if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType ==kNEHotspotHelperCommandTypeFilterScanList) {

            NSLog(@"WIFILIST:   %@", cmd.networkList);

            for (network  in cmd.networkList) {

                //NSLog(@"COMMAND TYPE After:   %ld", (long)cmd.commandType);

                if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"test"]) {

                    double signalStrength = network.signalStrength;

                    NSLog(@"Signal Strength: %f", signalStrength);

                    [network setConfidence:kNEHotspotHelperConfidenceHigh];

                    [network setPassword:@"password"];

                    NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];

                    NSLog(@"Response CMD %@", response);

                    [response setNetworkList:@[network]];

                    [response setNetwork:network];

                    [response deliver];

                }

            }

        }

    }];

    NSLog(@"result :%d", returnType);

    NSArray *array = [NEHotspotHelper supportedNetworkInterfaces];

    NSLog(@"wifiArray:%@", array);

    NEHotspotNetwork *connectedNetwork = [array lastObject];

    NSLog(@"supported Network Interface: %@", connectedNetwork);

}

        以上就是本節的全部內容,歡迎關注山掌櫃的微信公眾號,更多精彩等你來!


相關推薦

iOS開發獲取系統WiFi名稱WiFi列表WiFi強度WiFi設定密碼WiFi副標題標籤

      前段時間在開發藍芽功能,藍芽功能開發結束之後最近又在開發WiFi功能。WiFi功能也算簡單,主需要匯入使用蘋果系統自帶的框架即可,僅僅單純的獲取手機當前連線的WiFi名稱,或者獲取手機系統顯示的WiFi列表,那就so easy了。這裡我介紹一下WiFi開發主要的步

iOS開發呼叫系統自帶相機以及獲取相簿照片的功能實現

在iOS開發過程中,經常用到的技術之一就是APP上傳圖片了,這個知識點雖然不難,但是上傳圖片的需求卻是各不相同,比如有些時候需要你一次性在相簿中同時多選指定數量的照片,而且選擇的照片數量不確定,有時候又需要呼叫系統相機拍照圖片。針對這種不同需求的上傳照片,只要掌

iOS開發發出系統的聲音!發出自己的聲音!

這個連結非常詳盡地列舉了IOS7裡面所有的系統聲音,聲音的ID,聲音的存放位置 儘管現在已經是ios8的時代,但是系統聲音這個東東不會因此過時,畢竟聲音就那幾十種,不會一下子有太大變化。 https://github.com/TUNER88/iOSSystemSou

iOS 開發 解決Xcode7.3 不能自動索引標頭檔案檔名等問題

iOS 開發: 解決Xcode7.3 不能自動索引標頭檔案,檔名,程式碼補全等問題 解決方案: 開啟Xcode –> Target –> BuildSettings –> Apple LLVM 7.1 -Language-Objective C 下面的 Weak

iOS開發第一個iOS程式分析——代理生命週期函式

上一篇文章中我們開發了第一個iOS應用程式,用來計算兩個整數的和,今天我們將介紹其中的兩個檔案: 1.main.m檔案 首先展開supporting Files並且開啟其下的main.m檔案,其中main函式就是應用程式的入口,main函式只是標記了一個自動釋放池自動決定何時釋放記憶體,

iOS開發第一個iOS程式加法計算器

相信很多學習程式設計的人,不管是學習C,C++,JAVA,還是iOS開發用的Objective-C,入門不久就迫切地想寫點看得見的介面玩玩。當然瞭解諸如iOS架構,系統層次這些是非常必要的,但是作為入門案例,我們不妨從最直觀的地方入手!! 下面開始編寫我們的第一個iOS程式: 1.使用的

Revit開發獲取在Revit上拾取圖紙圖塊名稱

直接獲取沒法得,通過間接臨時事務生成模型得到 public static string GetBlockReferenceName(ImportInstance importInstance, Reference reference) {

玩轉iOS開發《使用系統自帶的UIActivityViewController和UIActivity進行內容分享》

目錄 簡介 這段時間有很多朋友都問我關於怎麼去整合ShareSDK或者友盟社會化分享SDK的問題, 其實我想說, Apple一開始就提供了一個類, 供我們去使用分享了, 在iOS 6之後更加增強了這個類, 使我們不再需要整合第三方的, 而且還支援自定義分享的item. 作者感言 在我寫這篇文章的時

iOS開發NSNotificationCenter通知中心的使用

        在開發過程中,使用通知的地方還是很多的,通知中心(NSNotificationCenter)實際上上一個訊息通知機制,是在程式內部提供的一種廣播機制。舉一個經典的應用場景:任意物件可以傳送通知到中心,同時任意物件也可以監聽中心傳送的通知。也就是說,把接收到的

Android開發實現系統自帶截圖功能 需要獲取System許可權

在一個service介面上,點選一個button按鈕,可以截圖 貼上程式碼: mButton.setOnClickListener(new OnClickListener(){          public void onClick(View arg0) {       

ios開發怎麼實現點選一個按鈕跳轉到一個新的介面並回退到上一介面

iOS三種檢視切換的原理各不相同:UITabBarController:以平行的方式管理檢視,各個檢視之間往往關係並不大,每個加入到UITabBarController的檢視都會進行初始化即使當前不顯示在介面上,相對比較佔用記憶體。UINavigationControlle

iOS開發2017蘋果APP上架後處於正在稽核狀態下修改版本資訊或者下架版本的方法

在iOS開發過程中,打包上傳APP的時候,會遇到當你提交版本成功之後,正在稽核的時候,你想起來有問題沒改,或者這個版本需要下架,那麼怎麼操作呢,其實很簡單,具體做法下面給你一一道來。 APP正在處於稽

iOS開發系統進度條顯示百科

在開發的過程中,一開始想加一個系統的loading條,可是當時由於犯懶就直接做了資源,今兒瞅見這篇文章覺得有必要記錄一下 首先是在UIAlertView裡顯示進度條: UIAlertView* alertView = [[[UIAlertView alloc] initWi

ios開發之 -- 呼叫系統定位獲取當前經緯度與地理資訊

在info.plist中加入: //允許在前臺使用時獲取GPS的描述 定位許可權:Privacy - Location When In Use Usage Description  //允許永久使用GPS描述 定位許可權: Privacy - Location A

iOS開發pch檔案的使用以及pch相對路徑和絕對路徑的設定方法

在ios開發過程中經常使用的一個檔案就是pch檔案,pch是一個以.pch作為字尾的一個預編譯檔案,主要是用來存放程式中比較穩定的、不會被經常修改的程式碼,比如說:巨集定義。 pch檔案的發展過程,在

iOS開發在碼雲上面新建專案以及把專案上傳到碼雲上並進行專案管理

       新建專案之後,把專案放在碼雲上面,方便維護管理,也為了保證程式碼在不可抗擊情況下能找回復原。使用碼雲管理專案程式碼是一個非常好的方法,對於初用著會覺得碼雲用起來不是那麼方便,有些步驟比較繁瑣,如果不借助第三方工具(如:SourceTree程式碼合併管理工具)上

iOS開發中,獲取iOS設備型號

bsp ios設備型號 isequal uid eve ide inf turn res 1、首先要導入頭文件   #import <sys/utsname.h> 2、代碼如下 - (NSString *)getDeviceVersionInfo{

iOS開發UILabel字號根據屏幕縮放

control after call git 步驟 obj gin begin follow 場景: 假設我們有這樣一個需求,iPhone 6(屏幕寬度為375pt)上的設計圖上的字號為17pt,iPhone 6 Plus上的字號根據屏幕寬度縮放,即字號為(17pt x 4

iOS 開發Method Swizzling

是個 不足 沒有 int from ios 開發 解決方案 它的 nslog iOS 開發之Method Swizzling 前言 如果你還不知道什麽是Method Swizzling,你可以看看NSHipster 的文章 ,我簡單介紹一下,method swizzling

iOS 開發CocoaPods 安裝及問題 ERROR: Error installing cocoapods: activesupport requires Ruby version>=2.2.2

iOS 開發:CocoaPods 安裝以及 ERROR:  Error installing cocoapods: activesupport requires Ruby version >= 2.2.2. 今天用新的Mac筆記本安裝coco