Как получить bssid в iPhone без приватной библиотеки?

Мне нужно получить bssid wifi для приложения iphone, чтобы определить, подключено ли оно. Как мне это сделать?

Нужны некоторые рекомендации о том, как это сделать.

3 ответа

Решение

Я сделал это так:

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));
            BSSID1 = (NSString *)CFDictionaryGetValue (networkDetails, kCNNetworkInfoKeyBSSID);
            BSSID = [[BSSID1 stringByReplacingOccurrencesOfString:@":"
                                                       withString:@""] uppercaseString];
            NSLog(@"%@",BSSID);

            CFRelease(networkDetails);
        }
    }

Ответ ниже скопирован из этого ответа.

На iOS 4.1+ вы можете сделать это:

#import <SystemConfiguration/CaptiveNetwork.h>

- (id)fetchSSIDInfo
{
    NSArray *ifs = (id)CNCopySupportedInterfaces();
    NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
    id info = nil;
    for (NSString *ifnam in ifs) {
        info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
        NSLog(@"%s: %@ => %@", __func__, ifnam, info);
        if (info && [info count]) {
            break;
        }
        [info release];
    }
    [ifs release];
    return [info autorelease];
}

Пример вывода:

2011-03-04 15:32:00.669 ShowSSID[4857:307] -[ShowSSIDAppDelegate fetchSSIDInfo]: Supported interfaces: (
    en0
)
2011-03-04 15:32:00.693 ShowSSID[4857:307] -[ShowSSIDAppDelegate fetchSSIDInfo]: en0 => {
    BSSID = "ca:fe:ca:fe:ca:fe";
    SSID = XXXX;
    SSIDDATA = <01234567 01234567 01234567>;
}

Обратите внимание, что в симуляторе не поддерживаются if. Протестируйте на своем устройстве.

1.Добавить SystemConfiguration.framework

2.import

3. Используйте метод ниже

     +(NSString *)currentWifiBSSID {

            NSString *bssid = nil;
            NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
            for (NSString *ifnam in ifs) {
                NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);

                NSLog(@"info:%@",info);

                if (info[@"BSSID"]) {
                    bssid = info[@"BSSID"];
                }
            }
            return bssid;
        }

Надеюсь это поможет

Другие вопросы по тегам