Как проверить имя сетевого провайдера в программировании iOS?

Мне нужно проверить, правильно ли устройство подключено к сети «My-Wifi» или нет. Если он подключен, я отправлю некоторые данные на сервер, иначе нет.

Сейчас я просто проверяю подключение к Интернету, используя класс Reachability.

Так как это проверить?


person Mrunal    schedule 18.02.2012    source источник
comment
Доступность также позволила проверить наличие WiFi.   -  person user523234    schedule 18.02.2012


Ответы (1)


Вы можете использовать CNCopySupportedInterfaces() звонок.

CFArrayRef interfaces = CNCopySupportedInterfaces();
CFIndex count = CFArrayGetCount(interfaces);

for (int i = 0; i < count; i++) {
    CFStringRef interface = CFArrayGetValueAtIndex(interfaces, i);
    CFDictionaryRef netinfo = CNCopyCurrentNetworkInfo(interface);
    if (netinfo && CFDictionaryContainsKey(netinfo, kCNNetworkInfoKeySSID)) {
        NSString *ssid = (__bridge NSString *)CFDictionaryGetValue(netinfo, kCNNetworkInfoKeySSID);
        // Compare with your needed ssid here
    }

    if (netinfo)
        CFRelease(netinfo);
}
CFRelease(interfaces);

По моему опыту, у вас обычно будет один интерфейс в массиве, который будет либо допустимой структурой, если вы подключены, либо NULL, если вы не подключены. Тем не менее, я оставил цикл for на всякий случай.

Приведение __bridge внутри необходимо, только если вы используете ARC.

person coverback    schedule 18.02.2012
comment
Эй, как использовать __bridge, да, я использую ARC для своего проекта. Что я делаю? - person Mrunal; 19.02.2012
comment
Вы используете, как в приведенном мной примере, когда хотите выполнить приведение функций, которые не возвращают владение объектом, поддерживаемое ARC. Для приведения ssid Xcode фактически вставил для меня __bridge. - person coverback; 19.02.2012
comment
Что делать, я получаю сообщение об ошибке «Использование необъявленного идентификатора __bridge» - person Mrunal; 19.02.2012
comment
Проверьте ответ здесь. Вам либо не нужен __bridge, либо вам нужно включить ARC. - person coverback; 19.02.2012
comment
Да, у меня включен ARC, но я получаю эту ошибку. Даже если я удалю этот __bridge, тогда ошибка изменится на ошибку: приведение к «NSString *» указателя, отличного от Objective-C, к указателю Objective-C запрещено с автоматическим подсчетом ссылок - person Mrunal; 19.02.2012
comment
Я не могу воспроизвести такое поведение. Он либо говорит, что неявное преобразование не разрешено, если приведения вообще нет, либо предлагает мне вставить __bridge внутри приведения, когда я ввожу только (NSString *). Может быть, кто-то еще может помочь. - person coverback; 19.02.2012