我是否正确使用了CNCopyCurrentNetworkInfo?

8
我遇到了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);
    }
}

通过查看NSLog语句,似乎在某些情况下CNCopyCurrentNetworkInfo会保留kCNNetworkInfoKeyBSSID的旧数据。
我设置了两个访问点,并试图获取当前连接的AP的BSSID。如果只打开一个AP,则返回正确的BSSID。如果我关闭该AP,则没有BSSID(正确),当我打开第二个AP并连接到它时,我会得到第二个AP的正确BSSID。
但是,如果我先打开一个AP,运行此代码并且正确地获得该AP的BSSID。然后我打开第二个AP,然后关闭第一个AP(强制设备漫游到第二个AP),则日志语句仍然返回第一个AP的BSSID(已关闭且不可能连接)。
有没有比我更多的经验?我是否应该在调用之间手动清除CNCopyCurrentNetworkInfo返回的值?
我在第四代iPod touch上运行了iOS 4.3的Xcode 4和iPhone 4上运行iOS 4.1的Xcode 3.2.4。

我也遇到了同样的问题,现在是在iPhone 4和iOS 5.0.1上。我不认为你已经找到了解决方案。 - Alex S
1个回答

4

由于这个问题似乎偶尔会得到赞成票并需要解决方案,因此我将提供答案。简而言之,是的,这就是你应该使用CNCopyCurrentNetworkInfo的方式。这是iOS 4和5中的一个错误。如果您目前正在运行iOS 6 beta,则建议您调查它在那里是否仍然以同样的方式运行,并在确实如此时向Apple报告。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接