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的名字,然後賦值給UItextfield:self.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;
開啟專案,在Xcode的Info.plist中Required background modes 新增一個 network-authentication(item)
4、配置 entitlements;
在Xcode的Info.plist中Entitlements File下新增一個鍵值對: com.apple.developer.networking.HotspotHelper -> YES
5、iOS 獲取 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 裡有如下資訊:SSID:Wifi 名稱;BSSID:站點的 MAC 地址;signalStrength: Wifi訊號強度,該值在0.0-1.0之間;secure:網路是否安全 (不需要密碼的 Wifi,該值為 false);autoJoined:裝置是否自動連線該 Wifi,目前測試自動連線以前連過的 Wifi 的也為 false ;justJoined:網路是否剛剛加入;chosenHelper:HotspotHelper是否為網路的所選助手
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 用來呼叫handle的block
@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