Остановите обновления основного местоположения, а затем перезапустите их с помощью таймера.
-
01-10-2019 - |
Вопрос
Мне было интересно, может ли кто-нибудь указать мне (или вставить) какой-нибудь код, позволяющий отключить обновления Core Location для экономии энергии.
Насколько я понимаю, вам следует прекратить обновление Core Location, как только вы получите показания желаемой точности.Если через определенное время вы не получите хороших показаний точности, вам также следует остановить обновления (предположительно с помощью таймера).Каждый раз, когда вы прекращаете обновления, вам следует запускать таймер (около 60 секунд), чтобы перезапустить Core Location и получить новые показания.
Есть ли код Apple, который все это делает?Пример кода LocateMe, TaggedLocations и Locations, похоже, этого не делает.
Решение
В примере LocateMe есть необходимый вам код.Вам просто нужно создать второй селектор для запуска.LocateMe вызывает в своем методе настройки следующее:
[self performSelector:@selector(stopUpdatingLocation:) withObject:@"Timed Out" afterDelay:[[setupInfo objectForKey:kSetupInfoKeyTimeout] doubleValue]];
Там написано, что через определенное время (kSetupInfoKeyTimeout) позвоните в stopUpdatingLocation
метод аргумент NSString = "Timed Out".Внутри stopUpdatingLocation
метод, [locationManager stopUpdatingLocation]
вызывается, чтобы сообщить CoreLocation об остановке.
Итак, все, что вам нужно сделать, это добавить еще один селектор, подобный этому...
[self performSelector:@selector(timeToRestartCoreLocation) afterDelay: 60];
внутри stopUpdatingLocation
метод, который будет вызывать timeToRestartCoreLocation
метод через 60 секунд.Тогда внутри твоего timeToRestartCoreLocation
метод, вызов [locationManager startUpdatingLocation]
чтобы снова запустить CoreLocation.