Точность местоположений, возвращаемых CLLocationManager
, определяется desiredAccuracy
, который по умолчанию равен kCLLocationAccuracyBest
, и доступной точностью устройства. Например, вы можете получить менее точные местоположения, если батарея устройства разряжена, или вы можете получить более точные местоположения, если они все еще кэшируются из другого приложения.
Однако получение невероятно точных координат разряжает значительную часть энергии аккумулятора и разряжает устройство. Приложения в фоновом режиме, вероятно, ограничены гораздо более низким разрешением точности для улучшения характеристик батареи.
Точные местоположения требуют большого количества энергии для использования радио GPS, в то время как менее точные местоположения могут полагаться на близлежащие точки доступа Wi-Fi и вышки сотовой связи в пределах досягаемости телефона.
Когда ваше приложение возобновит работу в фоновом режиме, система попытается повысить точность результатов, которые вы получите. Это сложная концепция, но взгляните на приложение «Карты» на вашем телефоне. Сначала круг, представляющий ваше местоположение, очень большой; по мере того, как система получает более точное представление о вашем местоположении, круг становится меньше. Эта визуализация показывает, что телефон использует больше энергии, чтобы получить более точное местоположение.
Вы увидите аналогичное явление с CLLocationManager
, когда ваше приложение возобновит работу в фоновом режиме: вы получите неточное местоположение и получите последующие, более точные обновления.
Это компромисс между удобством и временем автономной работы, который Apple пришлось искать при разработке своих API. Первое обновление местоположения пользователя, вероятно, будет не таким точным, если только оно не использует приложение «Карты» и местоположение не будет кэшировано.
Лучший совет, который я могу вам дать, - выслушать последующие обновления от менеджера местоположений и соответственно обновить ваш пользовательский интерфейс. Удачи!