Имитация изменения местоположения для `startMonitoringSignificantLocationChanges` - PullRequest
26 голосов
/ 17 декабря 2011

Я пишу приложение для iPhone и использую Location Services.Я использую метод startMonitoringSignificantLocationChanges на CLLocationManager.(Как я понимаю, это для сервисов определения местоположения с низким энергопотреблением и низкой точностью.) Когда я собираю и запускаю свое приложение в iOS Simulator, оно прекрасно определяет мое местоположение.Тем не менее, я хочу смоделировать обновления для местоположения после первоначального исправления.

Я заметил эти две опции:

  • Симулятор iOS: Отладка> Меню местоположения
  • Xcode 4: Продукт> Отладка> Меню имитации местоположения

Обе они работают приемлемо для имитации начального исправления.(Например, выберите «Apple» из первого или «Moscow» из второго.) Однако последующие изменения любого из них НЕ приведут к обновлению другого местоположения в смоделированном приложении.

Я хочу получать уведомления об изменении смоделированного местоположения при использовании startMonitoringSignificantLocationChanges.(Симулятор iOS генерирует серию обновлений, когда я использую startUpdatingLocation.) Это упрощает тестирование приложений с поддержкой определения местоположения, не вынимая устройство в поле.

Два вопроса:

  • В чем разница между этими двумя?
  • Как использовать iOS Simulator и / или Xcode 4 для имитации серии изменений местоположения?

ура.

Ответы [ 3 ]

36 голосов
/ 17 декабря 2011

Если вы хотите создать трек, вы можете создать файл GPX с такими путевыми точками, как этот:

<?xml version="1.0" encoding="UTF-8"?>
<gpx>
    <wpt lat="52.373" lon="4.871"></wpt>
    <wpt lat="52.374" lon="4.872"></wpt>
    <wpt lat="52.375" lon="4.871"></wpt>
</gpx>

Сохраните его как track.gpx. Будьте осторожны, чтобы в начале не было пробелов.

Когда вы строите и запускаете, в нижней части XCode есть панель инструментов со стрелкой местоположения (аналогично той, что на iPhone). Это для "Simulate Location". Нажмите там и загрузите в свой файл GPX. Когда ваше приложение работает в симуляторе, синяя точка должна двигаться. Я не думаю, что есть способ контролировать время, поэтому он обновляет свое местоположение каждые полсекунды или около того.

Разница, которую я вижу в меню симулятора, заключается в том, что вы не можете иметь собственную дорожку, только пользовательскую точку. Я не знаю, почему параметры меню отличаются, возможно, в какой-то момент они добавят параметр для пользовательского трека в симуляторе.

9 голосов
/ 23 декабря 2011

FWIW, мониторинг значительных изменений местоположения связан почти исключительно с триангуляцией вышек сотовой связи и передачей обслуживания. То, как это обрабатывается в симуляторе, вероятно, сильно отличается от того, что было бы на устройстве. Даже мониторинг региона получает дополнительный бонус от Wi-Fi и других приложений, использующих местоположение, чтобы получать более частые обновления.

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

0 голосов
/ 21 февраля 2016

Чтобы узнать, почему @ Nevan-king ответит, почему нет обновлений при использовании startMonitoringSignificantLocationChanges

См. Примечание Apple для func startMonitoringSignificantLocationChanges()

Приложения могут ожидатьуведомление, как только устройство переместится на 500 метров или более от предыдущего уведомления.Не следует ожидать уведомлений чаще, чем раз в пять минут .Если устройство способно извлекать данные из сети, менеджер местоположения с большей вероятностью будет своевременно доставлять уведомления.

...