2013-04-08 2 views
6

У меня есть код, который создает геозонность на моем iPhone, которая запускает некоторый код, который будет выполняться при вызове didExitRegion. Тем не менее, я обнаружил, что когда у меня отключен WiFi, то didExitRegion никогда не запускается. Требуется ли WiFi для мониторинга изменений в регионе на iOS? Моя желаемая точность равна kCLLocationAccuracyHundredMeters. Я тестирование на прошивке 6.1 и iPhone 4.iOS - Geofencing with WiFi отключен

Вот мой код для настройки мониторинга местоположения:

- (id)init { 
self = [super init]; 
if (self) { 
    CLLocationManager *manager = [[CLLocationManager alloc] init]; 
    manager.delegate = self; 
    manager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    manager.distanceFilter = RADIUS/10.0; 
    manager.headingFilter = kCLHeadingFilterNone; 
    self.locationManager = manager; 
    self.authorizationStatus = [CLLocationManager authorizationStatus]; 
} 
return self; 
} 

Благодаря

ответ

11

Устройства iOS используют три метода для обнаружения местоположения пользователя. Из (обычно) наиболее точным наименее точным они:

  1. GPS аппаратного
  2. Выявляя близлежащих сетей WiFi
  3. Cell Tower триангуляции

Если ваше приложение не использует GPS или не работает (т. е. ранее был прерван), устройство попытается использовать методы 2 и 3 выше, чтобы найти пользователя. Таким образом, способность устройства находить пользователя (когда аппаратное обеспечение GPS не используется или имеется слабый сигнал GPS) зависит от доступности Wi-Fi-сетей и сотовых вышек. Чем больше сетей Wi-Fi и ячеек, тем лучше точность местоположения. Поэтому, когда пользователь входит или выходит из контролируемой области (например, пересекает «геозонность»), невозможно точно предсказать, когда пользователь получит уведомление, если вообще. (Конечно, если область, о которой идет речь, всегда одна и та же, устройство будет более или менее локализовать пользователя с одинаковой степенью точности в каждом случае).

Вот соответствующая документация от Location Awareness Programming Guide:

Конкретные пороговые расстояния определяются аппаратными средствами и технологиями определения местоположения, которые в настоящее время доступны. Например, если Wi-Fi отключен, мониторинг области значительно менее точен. Однако для целей тестирования вы можете предположить, что минимальное расстояние составляет около 200 метров.

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

+0

определенно правильный. вы никогда не сможете отключить Wi-Fi в настройках системы, даже если вы не используете WIFI. – Jacky

+0

@ Jacky - я могу отключить wi-fi на своем iPhone, на iOS 7. Я подметаю нижний край, вверх, и у меня есть Центр управления. Затем я переключаю wi-fi символ (AirPort). –

+0

Может ли приложение выбрать только один определенный метод (ы) среди трех? Приложение Citymapper говорит, что его геообработка не использует чип GPS. Это возможно ? –

2

Если выключить WiFi, ваша точность определения местоположения снижается. Если у вас нет сигнала GPS (внутри некоторых зданий), вы не получите никаких обновлений местоположения. Вы пробовали это, когда вы находитесь снаружи, или если вы использовали симулятор местоположения для тестирования?

Кроме того, WiFI не требуется для функции geofence, если у вас есть GPS (iPhone или iPad с симами).

+2

Эй, я тестировал его снаружи, а не внутри. Я проверил его, идя вокруг, где я должен нарушать геозонность. Когда Wi-Fi выключен, он никогда не нарушает геозонность. Я понимаю, что отключение wifi снижает точность определения местоположения, но не до такой степени, что геообработка просто не работает? –

+0

Это, вероятно, означает несколько вещей. Вы вышли из забора, когда отключили Wi-Fi из-за разницы в точности, и Apple не выполнила обратный вызов. Странные вещи могут случиться. Я бы проверил его, установив вашу точность до 10 метров, а затем установил геозонность, используя только GPS с Wi-Fi и ваш радиус 100 метров. И тест didExitRegion запускается. – mskw

2

Странный странный материал может произойти без использования wifi с использованием основного местоположения. Чтобы помочь в вашем случае, я избавлюсь от фильтра расстояния, который может испортить вещи, и это не очень полезно. Я бы, вероятно, использовал только kCLLocationAccuracyBest для чего-либо, где мне нужна точность, необходимая для настройки геозонности. Используя другие точности и фильтры для меня, иногда через счетчик gps вылетает на 1000 метров и занимает минуту или две, чтобы исправить себя. Если это слишком большая батарея, тогда настройте систему, в которой он выключается и включается в зависимости от того, насколько далеко он находится от забора.