2012-11-02 95 views
4

是否可以運行一個方法,該方法將返回用戶所連接的無線網絡的名稱?在我的應用程序內部,我希望能夠返回用戶連接到的無線網絡的名稱。檢測無線網絡的名稱

+1

看一看這個問題: http://stackoverflow.com/questions/5198716/iphone-get-ssid-without-private-library –

回答

8

這工作適合我:

#import <SystemConfiguration/CaptiveNetwork.h> 

CFArrayRef myArray = CNCopySupportedInterfaces(); 
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0)); 
// NSLog(@"SSID: %@",CFDictionaryGetValue(myDict, kCNNetworkInfoKeySSID)); 
NSString *networkName = CFDictionaryGetValue(myDict, kCNNetworkInfoKeySSID); 

if ([networkName isEqualToString:@"Hot Dog"]) 
{ 
    self.storeNameController = [[StoreDataController alloc] init]; 
    [self.storeNameController addStoreNamesObject]; 
} 
else { 
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Connection Failed" 
                message: @"Please connect to the Hot Dog network and try again" 
                delegate: self 
             cancelButtonTitle: @"Close" 
             otherButtonTitles: nil]; 

    [alert show]; 
+0

如何釋放CNCopySupportedInterfaces和CNCopyCurrentNetworkInfo的返回值?文檔聲明你「必須」釋放返回值。 – Stavash

+0

壞消息:'CNCopyCurrentNetworkInfo'已被棄用:iOS 9.0首次棄用 - 對於強制網絡應用程序,這已被完全取代。對於其他應用程序,不能直接替換。請描述您使用此API的錯誤,以便我們可以在這種情況發生時考慮您的需求。 好消息:雖然不推薦使用,但它仍然可以在iOS 9中使用,並且在iOS 10中它已被取消棄用。 –

6

Developer.apple,您可以使用CNCopyCurrentNetworkInfo

它返回給定的網絡接口的當前網絡信息。

CFDictionaryRef CNCopyCurrentNetworkInfo (
    CFStringRef interfaceName 
); 

它包含一個包含接口當前網絡信息的字典。所有權遵循創建規則。

注意可提供的iOS 4.1及更高版本

例:

這個例子將在真實的設備正常工作,它可以在模擬器崩潰。

添加SystemConfiguration.framework

導入CaptiveNetwork頭下同

#import <SystemConfiguration/CaptiveNetwork.h>

然後寫下面的代碼。

CFArrayRef myArray = CNCopySupportedInterfaces(); 
    // Get the dictionary containing the captive network infomation 
    CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));  
    NSLog(@"Information of the network we're connected to: %@", captiveNtwrkDict);  
    NSDictionary *dict = (__bridge NSDictionary*) captiveNtwrkDict; 
    NSString* ssid = [dict objectForKey:@"SSID"]; 
    NSLog(@"network name: %@",ssid); 

使用的Bonjour,應用程序都通告本身在本地網絡上,並顯示網絡

在本申請的其他實例的列表見樣品Witap應用

+0

的'CNCopyCurrentNetworkInfo'聽起來很有前途,但我有麻煩它正常運行。 Wifi的接口名稱是什麼?我搜索了它,但沒有運氣。 –

+0

我編輯了我的答案..請檢查它' –

+0

這是事實,這可能會在模擬器記錄在任何地方崩潰?它在模擬器中爲我工作了好幾個星期,然後突然可靠地崩潰了。 –