2011-04-18 68 views
8

我遇到了一些CNCopyCurrentNetworkInfo返回的数据问题,并想知道我是否做错了什么。我正确使用CNCopyCurrentNetworkInfo吗?

我用下面的代码来显示当前连接的接入点的BSSID:

NSArray* interfaces = (NSArray*) CNCopySupportedInterfaces(); 

for (NSString* interface in interfaces) { 

CFDictionaryRef networkDetails = CNCopyCurrentNetworkInfo((CFStringRef) interface); 
if (networkDetails) { 
    NSLog(@"all details: %@", (NSDictionary *)networkDetails); 
    NSLog(@"BSSID: %@", (NSString *)CFDictionaryGetValue (networkDetails, kCNNetworkInfoKeyBSSID)); 
    CFRelease(networkDetails); 
    } 
} 

通过审查,就好像CNCopyCurrentNetworkInfo挂到旧数据kCNNetworkInfoKeyBSSID但某些情况下会出现的NSLog语句。

我有两个接入点设置,我试图获得当前连接的AP的BSSID。如果我只开启一个AP,它将返回正确的BSSID。如果我关闭该AP,则无法获得BSSID(正确),并且当我打开第二个AP并连接到它时,我会得到第二个AP的正确BSSID。

但是,如果我从启动一个AP开始运行此代码并正确给出该AP的BSSID。然后我打开第二个AP,然后关闭第一个AP(强制设备漫游到第二个AP),日志语句仍然返回第一个AP(我已经关闭并且不可能连接到)的BSSID。

有没有人比我有更多的经验呢?我的意思是手动清除CNCopyCurrentNetworkInfo在调用之间返回的值吗?

我已经上都有了第四代iPod运行该触摸运行iOS 4.3使用的Xcode内置4和iPhone 4运行iOS 4.1使用的Xcode 3.2.4

+0

我有同样的问题,现在在iPhone 4和iOS 5.0.1。我不认为你已经找到了解决方案。 – 2012-02-07 23:26:11

回答

4

我将提供一个答案建问题,因为它似乎得到偶尔的投票,并可以解决方案。

简短的版本是,这是你应该如何使用CNCopyCurrentNetworkInfo。这是iOS 4和5中的一个错误。如果您目前正在运行iOS 6测试版,我会建议调查它是否仍然以这种方式在那里运行,并将其报告给Apple。

我很幸运,因为我从事企业应用程序工作,并能够使用对私有API的调用获取此信息。有关如何做到这一点的信息,我可能会建议看看这里:iphone-wireless on google code