Прекратить возврат кэшированного местоположения CLLocationManager

StackOverflow https://stackoverflow.com/questions/2262177

Вопрос

Мне интересно, есть ли какой-нибудь способ сделать так, чтобы CLLocationManager не возвращал автоматически кэшированное местоположение.Я понимаю, что в документах говорится: «Служба определения местоположения возвращает исходное местоположение как можно быстрее, возвращая кэшированную информацию, если она доступна», но это кэшированное местоположение может находиться очень далеко от текущего местоположения пользователя, и мне хотелось бы, чтобы оно было более точным, если это возможно.

Спасибо за любую помощь!

Это было полезно?

Решение

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

Временная метка местоположения — это NSDate, поэтому просто получите значение [NSDate date] когда ваше приложение запускается, и используйте это в качестве ориентира при фильтрации местоположений.Вы можете даже выбросить эталонное значение, как только начнете получать новые данные, и рассматривать нулевую базовую дату как подразумевающую, что новым местоположениям следует доверять.

Другие советы

-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{
    if ([newLocation.timestamp timeIntervalSinceNow] > -10.0) // The value is not older than 10 sec. 
    { 
         // do something 
    } 
 }

Вы можете использовать это свойство CLLocationManager:

@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocation *location;

Стоимость этого имущества составляет nil если данные о местоположении никогда не были получены, в противном случае CoreLocation кэширует свои данные именно здесь.Поэтому, если вы всегда хотите начинать с нуля, просто проверьте, установлено ли это свойство. nil или нет.Если это nil, тогда с тобой все в порядке;в противном случае вам нужно остановить диспетчер местоположений и запустить его заново:это приведет к принудительному обновлению, в результате которого кэшированное значение будет перезаписано новым, которое вы только что активировали.

Смотрите мой ответ здесь:Как удалить кэш cllocation?о том, «как удалить кэш cllocation».это должно решить вашу проблему с кешем CLLocationManager.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top