【问题标题】:Am I using CNCopyCurrentNetworkInfo correctly?我正确使用 CNCopyCurrentNetworkInfo 吗?
【发布时间】:2011-08-07 13:40:07
【问题描述】:

我对 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 的 BSSID(我已关闭并且可能未连接到)。

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

我已经在运行使用 Xcode 4 构建的 iOS 4.3 的第 4 代 iPod touch 和运行使用 Xcode 3.2.4 构建的 iOS 4.1 的 iPhone 4 上运行此程序

【问题讨论】:

  • 我遇到了同样的问题,现在在 iPhone 4 和 iOS 5.0.1 上。我认为您没有找到解决方案。

标签: iphone objective-c network-programming wifi


【解决方案1】:

我将提供这个问题的答案,因为它似乎偶尔会获得赞成票,并且可以提供解决方案。

简短的版本是,是的,这就是您应该使用 CNCopyCurrentNetworkInfo 的方式。这是 iOS 4 和 5 中的一个错误。如果您当前运行的是 iOS 6 测试版,我建议您调查它是否仍然以这种方式运行,如果是,则向 Apple 报告。

我很幸运,因为我从事企业应用程序的工作,并且能够通过调用私有 API 来获取这些信息。有关如何执行此操作的信息,我可能会建议您看这里:iphone-wireless on google code

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 2015-06-25
    • 2022-01-08
    • 2011-09-26
    • 2019-05-03
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多