Мое приложение должно отслеживать изменения местоположения пользователя в фоновом режиме и прекрасно работает, пока пользователь перемещается.
Когда пользователь останавливается и CLLocationManager
приостанавливается через 10-20 минут или около того. Это уведомление указывается следующим образом:
-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager{}
И это тоже прекрасно со мной. Отлично, я сохраняю батарею и т.д.
Проблема заключается в том, что CLLocationManager
никогда не просыпается, когда пользователь снова начинает перемещаться и после делегированных методов никогда не запускается, пока я не поставлю свое приложение на передний план (становится активным):
//Never called back after CLLocationManager pauses:
-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager{}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{}
Почему locationManagerDidResumeLocationUpdates
никогда не вызывается после того, как устройство снова начинает перемещаться? Если GPS не возобновляется автоматически (так как автоматически было приостановлено)?
Есть ли способ возобновить работу GPS без взаимодействия с пользователем?
Приложение имеет следующее объявление в файле Info.plist:
И мои настройки CLLocationManager:
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setActivityType:CLActivityTypeFitness];
//I WANT pauses to save some battery, etc... That is why following line is commented out (default)
//[locationManager setPausesLocationUpdatesAutomatically:NO];
locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];