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];
}