Остановка фоновых обновлений CoreLocation - PullRequest
1 голос
/ 14 июля 2011

Мое приложение регистрируется для фоновых обновлений местоположения (не существенное изменение. Мне нужно больше детализации, чем километры)

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

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

Документация Apple по этому вопросу приводит меня в круги.В тот момент, когда я думаю, что «Выполнение кода в фоновом режиме» вот-вот даст ответ, оно направит меня к «Руководству по программированию для определения местоположения».В тот момент, когда этот вопрос становится конкретным по этому вопросу, он возвращает меня к разделу «Выполнение кода в фоновом режиме».:)

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Я не уверен, имеет ли ваше приложение всего контроль над этим, но документы для stopUpdatingLocation указывают следующее ...

Отключение доставки событий дает получателю возможность отключить соответствующее оборудование (и тем самым сэкономить электроэнергию), когда ни одному клиенту не нужны данные о местоположении

Что может означать, что если ваше приложение будет единственным, запрашивающим фоновые данные о местоположении, и вы попросите его остановить приемник GPS, то отключите соответствующее оборудование для экономии энергии, что, я думаю, именно для вас.

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

0 голосов
/ 24 февраля 2012

Вызов stopUpdatingLocation действительно остановит GPS и т. Д., Но если вы поместите этот вызов в locationManager:didUpdateToLocation:fromLocation вашего CLLocationManager delegate, то он никогда не будет вызван.

Имейте в виду, что этот методвыполняется только тогда, когда более точная позиция или a (в соответствии с активным дистанционным фильтром) значительно отличается от позиции .Если устройство вообще не двигается и если обстоятельства, влияющие на точность, также не меняются, его нельзя вызывать часами (я сам проверял это в течение нескольких минут), и GPS также будет оставаться включенным в течение этого времени.

Для приложений, которые работают только на переднем плане, вы можете использовать NSTimer 60 минут, но для приложений, которые работают в фоновом режиме, наиболее близким к рабочему решению, которое я нашел до сих пор, является запланированное UILocalNotification,Но даже для этого требуется, чтобы пользователь подтвердил предупреждение, прежде чем приложение перезапустится и сможет отключить GPS.

Может быть, beginBackgroundTaskWithExpirationHandler: - ключ к лучшему решению, но я до конца не понялпока.

...