#iphone #location #monitoring #cllocationmanager
#iPhone #Расположение #мониторинг #cllocationmanager
Вопрос:
Я внедрил фоновое отслеживание местоположения с использованием стандартных служб определения местоположения, и оно отлично работает. Однако, поскольку эта реализация использует много энергии, я решил переключиться на мониторинг значительных изменений местоположения. В принципе, я просто изменил все вызовы на startUpdatingLocation
на startMonitoringSignificantLocationChanges
и повторно использовал методы CLLocationManagerDelegate, которые я реализовал ранее.
Проблема в том, что после переключения на мониторинг значительных изменений местоположения метод делегирования locationManager:didUpdateToLocation:fromLocation
вызывается только один раз, когда я начинаю мониторинг, и никогда больше не вызывается впоследствии. Я обошел телефон на пару километров и попытался покататься на нем на поезде, но все равно метод так и не был вызван. Я что-то здесь упускаю? Есть ли настройки, которые мне нужно включить, или специальный код, который мне нужно написать, чтобы это сработало?
Спасибо!
Ответ №1:
Для значительного изменения местоположения требуются вышки сотовой связи для работы. Если у вас нет приема по сотовому телефону, вы не получите никаких результатов. Вы также можете вызвать метод significantLocationChangeMonitoringAvailable от CLLocationManager, чтобы проверить, доступен ли он.
Комментарии:
1. Вы правы, похоже, что проблема вызвана низким уровнем сигнала мобильного телефона.
2. Я не верю, что это правильно. Во-первых, ключ UIRequiredDeviceCapabilities требуется только для того, чтобы «iTunes и App Store знали, какие функции, связанные с устройством, требуются приложению для запуска». Во-вторых, клавиша «местоположение» в UIBackgroundModes необходима только тогда, когда приложению «требуется использование стандартных служб определения местоположения (в отличие от службы определения местоположения значительных изменений)». Подробности: developer.apple.com/library/ios/#documentation/general / …