我正确使用CNCopyCurrentNetworkInfo吗?

时间:2011-04-18 02:45:50

标签: iphone objective-c network-programming wifi

我对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(我已关闭并且可能无法连接)。 / p>

有没有人比我更有经验?我打算在调用之间手动刷新CNCopyCurrentNetworkInfo返回的值吗?

我在使用Xcode 4构建的运行iOS 4.3的第4代iPod touch和使用Xcode 3.2.4构建的运行iOS 4.1的iPhone 4上运行此功能

1 个答案:

答案 0 :(得分:4)

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

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

我很幸运,因为我处理企业应用程序,并且能够使用私有API调用获取此信息。有关如何执行此操作的信息,我建议您查看此处:iphone-wireless on google code