Я правильно использую CNCopyCurrentNetworkInfo? - PullRequest
8 голосов
/ 18 апреля 2011

У меня возникли некоторые проблемы с данными, возвращаемыми 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 текущей подключенной точки доступа.Если я запускаю только одну включенную точку доступа, она возвращает правильный BSSID.Если я выключаю эту точку доступа, я не получаю BSSID (правильно), и когда я включаю вторую точку доступа и подключаюсь к ней, мне дают правильный BSSID второй точки доступа.

Однако, если я начинаю с одной включенной точкой доступана запустить этот код, и мне правильно дали BSSID этого AP.Затем я включаю вторую точку доступа, затем выключаю первую (заставляя устройство переходить на вторую точку доступа) операторы журнала по-прежнему возвращают BSSID первой точки доступа (которую я отключил и, возможно, не подключен).

Кто-нибудь имеет больше опыта с этим, чем я?Должен ли я вручную сбрасывать значения, возвращаемые CNCopyCurrentNetworkInfo между вызовами?

Я выполнял это как на iPod touch 4-го поколения под управлением iOS 4.3, созданной с использованием Xcode 4, так и на iPhone 4 под управлением iOS 4.1, построенной с использованием Xcode3.2.4

1 Ответ

4 голосов
/ 03 июля 2012

Я собираюсь дать ответ на этот вопрос, потому что он, кажется, иногда получает голосование и может помочь с решением.

Короткая версия: да, именно так вы должны использовать CNCopyCurrentNetworkInfo.Это ошибка в iOS 4 и 5. Если вы в настоящее время используете бета-версию iOS 6, я бы посоветовал выяснить, работает ли она там по-прежнему, и сообщить об этом Apple, если это так.

Мне повезлов том, что я работал над корпоративными приложениями и смог получить эту информацию, используя обращения к частным API.Информацию о том, как это сделать, я бы порекомендовал посмотреть здесь: iphone-wireless on google code

...