2012-11-02 50 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

这是事实,这可能会在模拟器记录在任何地方崩溃?它在模拟器中为我工作了好几个星期,然后突然可靠地崩溃了。 –