Подтвердить что ты не робот

Имитация изменений местоположения для `startMonitoringSignificantLocationChanges`

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

Я заметил эти два варианта:

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

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

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

Два вопроса:

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

Приветствия.

4b9b3361

Ответ 1

Если вы хотите сделать трек, вы можете создать файл 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). Это для "Имитировать местоположение". Нажмите здесь и загрузите файл GPX. Когда ваше приложение запускается в симуляторе, синяя точка должна перемещаться. Я не думаю, что есть способ контролировать время, поэтому он обновляет свое местоположение каждые полсекунды или около того.

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

Ответ 2

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

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

Ответ 3

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

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

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