У меня проблемы с данными, возвращаемыми 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.
У меня настроены две точки доступа и Я пытаюсь получить BSSID подключенной в данный момент точки доступа. Если я начинаю с включенной только одной AP, он возвращает правильный BSSID. Если я выключаю эту точку доступа, я не получаю BSSID (правильный), а когда я включаю вторую точку доступа и подключаюсь к ней, мне дается правильный BSSID второй точки доступа.
Однако, если я начинаю с одной включенной точки доступа, запустите это код, и мне правильно дан BSSID этой AP. Затем я включаю вторую точку доступа, затем выключаю первую (заставляя устройство перемещаться ко второй точке доступа), операторы журнала по-прежнему возвращают BSSID первой точки доступа (которую я отключил и к которой, возможно, не подключен).
Есть ли у кого-нибудь больше опыта в этом, чем у меня? Могу ли я вручную сбрасывать значения, возвращаемые CNCopyCurrentNetworkInfo между вызовами?
Я запускал это как на iPod touch 4-го поколения под управлением iOS 4.3, созданном с использованием Xcode 4, так и на iPhone 4 под управлением iOS 4.1, созданном с использованием Xcode 3.2.4