Расположение ядра: переключение startMonitoringSignificantLocationИзменяет вниз от kCLDistanceFilterNone - PullRequest
1 голос
/ 04 марта 2012

Для экономии заряда батареи я отслеживаю обновления местоположения, чтобы увидеть, был ли пользователь в течение некоторого времени;если это так, я затем понизил CLLocationManager с его основных настроек kCLLocationAccuracyBestForNavigation и kCLDistanceFilterNone (максимальные настройки) для мониторинга только значительных изменений местоположения.

Проблема в том, что он не работает: после вызова startMonitoringSignificantLocationChanges обновления местоположения обновляютсяпродолжайте вливаться с высокой скоростью, как они это делали до вызова.

Как снизить активность, а затем вернуться обратно?

Обновление : этот кодотвечает на вопрос:

        //Set
        if ( shouldMonitorSignificantChangeUpdates ) {
            NSLog(@"Entering -> significant change mode");
            [self.locationManager stopUpdatingLocation];
            [self.locationManager startMonitoringSignificantLocationChanges]; //aka stop monitoring every location change
        } else {
            NSLog(@"Exiting <- significant change mode");
            [self.locationManager stopMonitoringSignificantLocationChanges]; //aka begin monitoring every location change
            [self.locationManager startUpdatingLocation];
        }

Ответы [ 2 ]

1 голос
/ 04 марта 2012

На самом деле код, отредактированный в вопросе , работает .Это позволяет системе переходить от «постоянного потока местоположений» к «случайным обновлениям» по желанию.

Я думаю, что мое первоначальное тестирование было просто недостаточно агрессивным, и в документах на самом деле не обсуждается использование обоихтехники, вместо этого воображая приложение, которое нуждается либо в навигации, либо в значительных изменениях.

1 голос
/ 04 марта 2012

Из документов:

startMonitoringSignificantLocationChanges не использует значение в свойстве distanceFilter для генерации событий

Вместо использования startMonitoringSignificantLocationChanges используйте таймер для остановки и запуска обновлений местоположения.

Вы также можете попробовать отключить обновления местоположения, а затем снова включить его, используя startMonitoringSignificantLocationChanges. Не забывайте, что это заставит систему запустить ваше приложение после того, как оно будет прекращено, когда обнаружит существенное изменение местоположения. Это не похоже на то, что вы действительно хотите.

...