iOS: можно ли вручную связать сеть Wi-Fi с географическим местоположением?

Можно ли заставить телефон "знать", что конкретная сеть Wi-Fi находится в определенном географическом местоположении?

if (answer == YES)
{  
    than how?
}
else
{
    can the phone figure this out by himself?  
}

Другой похожий вопрос: есть ли способ запустить мониторинг области с точностью ~100 м, но при этом указывать CLLocationManager использовать только сети Wi-Fi и сотовые антенны? Потому что я не хочу включать GPS, несмотря ни на что...

Спасибо!

2 ответа

Решение

Позиционирование iPhone отстой, и вы ничего не можете сделать.

Если вы сделали джейлбрейк своего устройства, вы можете использовать частную платформу Apple80211 для поиска доступных сетей Wi-Fi и уровня их сигнала. Но это также означает, что ваше приложение будет отклонено.

Если пользователь вручную подключается к Wi-Fi, вы можете видеть MAC-адреса устройств в этой сети и использовать их, чтобы угадать свое местоположение. Поскольку радиус действия Wi-Fi составляет 50 метров, вы получаете именно такую ​​точность.

Вся система позиционирования прозрачна для разработчика App Store, это означает, что приложение не может отключить GPS, перечислить Wi-Fi или прочитать уровень сигнала. Самое большее, что вы можете сделать, это угадать, если вы позиционируете через GPS или Wi-Fi, глядя на параметр высоты.

Вариант использования: вы находитесь в торговом центре и хотите знать, где находится магазин X. Вероятно, нет сигнала GPS, и если вы установите GPS-ретранслятор, вы получите положение антенны этого ретранслятора, а не ваше положение. Даже если вы установите дюжину точек доступа Wi-Fi, вы не сможете попросить пользователя подключиться вручную, потому что это будет хлопотно, и даже если он сделает это, он получит точность 50-100 метров, и тогда существует риск безопасности подключения здесь. и там. В основном вы облажались.

Я полностью согласен с Яно: логика яблока имеет больше смысла, чем другие решения. В любом случае Вы можете легко получить свой идентификатор сети WIFI:

-(void)LogInfo:(NSDictionary*)info forKey:(NSString*)key;
{
    NSString* temp;
    temp = [info objectForKey: key];
    NSLog(temp);
}


- (void)fetchSSIDInfo
{
    NSArray *ifs = (id)CNCopySupportedInterfaces();
    NSDictionary* info = nil;
    for (NSString *ifnam in ifs)
    {
        info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
        NSString *temp = [NSString stringWithFormat:@"%@", [info description]];
        [self AddToLog: temp];

        [self LogInfo:info forKey:@"BSSID"];
        [self LogInfo:info forKey:@"SSID"];
        [self LogInfo:info forKey:@"SSIDDATA"];
        [info release];
    }

    [ifs release];

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