iPhone GPS - заряд аккумулятора очень быстрый - PullRequest
5 голосов
/ 31 декабря 2011

Мы разрабатываем приложение, которое интенсивно использует GPS, и мы не можем оптимизировать время автономной работы.

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

Вот код:

locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = 100;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];

В идеале мы хотим запускать GPS каждые 20 минут (если нет изменения местоположения, тогда сохраняйте батарею) ИЛИ каждые 5 минут, если есть изменение местоположения. По словам моего разработчика, это не может быть сделано

Ранее мы использовали kCLLocationAccuracyBest, который очень быстро расходовал батарею, и теперь мы используем kCLLocationAccuracyHundredMeters.

startUpdatingLocation - получить координаты GPS. Есть еще один вызов startMonitoringSignificantLocationChanges, который должен получить координаты AGPS, которые, как я полагаю, возвращают координаты всякий раз, когда изменится вышка сотовой связи, и, следовательно, расходуют батарею очень быстро.

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

Любая помощь будет принята с благодарностью Спасибо!

Ответы [ 4 ]

4 голосов
/ 31 декабря 2011

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

Это именно то, что он делаетНо вы спешите с выводами о силе, необходимой для этого.Приемник GPS и приемопередатчик WiFi могут использоваться для определения местоположения, но это дополнительные устройства, которые должны быть включены, чтобы быть полезными.Но мобильные телефоны, такие как iPhone, должны в любом случае поддерживать связь с ближайшей сотовой вышкой, чтобы принимать телефонные звонки, поэтому использование вышек сотовой связи в качестве источника информации о местоположении должно быть очень эффективным с точки зрения энергопотребления.Вот что говорит справочная страница CLLocationManager о -startMonitoringSignificantLocationChanges:

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

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

В идеале мы хотим запускать GPS каждые 20 минут (если нет изменения местоположения, тогда экономьте батарею) ИЛИ каждые 5 минут, если есть изменение местоположения.По словам моего разработчика, это невозможно сделать

Похоже, здесь есть какое-то недопонимание.Конечно, вы можете запускать GPS каждые 20 минут, чтобы получить исправление, если вы этого хотите, хотя вы не можете сделать это на заднем плане.Служба значительных изменений местоположения уведомит ваше приложение, даже если оно работает в фоновом режиме, поэтому, возможно, ваш разработчик говорит об обновлениях в фоновом режиме.

0 голосов
/ 28 апреля 2012

Если вам требуется хороший уровень точности, вы должны запустить StartUpdatingLocation и, как только вы получите первое исправление, вы должны затем остановить StopUpdatingLocation и затем startMonitoringSignificantLocationChanges.

Этого достаточно для большинства приложений.

0 голосов
/ 01 января 2012

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

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

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

0 голосов
/ 31 декабря 2011

В идеале мы хотим запускать GPS каждые 20 минут (если нет измените местоположение, затем сохраните батарею) ИЛИ каждые 5 минут, если есть изменение местоположения. По словам моего разработчика, это не может быть сделано

Это можно сделать с помощью NSTimer, который вызывает метод startLocating (пользовательский метод, который создает CLLocationManager и вызывает startLocating для него) метод каждые 20 минут. Обязательно позвоните в CLLocationManager stopLocating, как только вы нашли CLLocation с точностью, которая вам нравится.

Тем не менее, это означает, что в течение 20 минут вы можете использовать полностью отключенное местоположение. Это зависит от того, как вы планируете использовать местоположение и насколько оно должно быть точным, но, возможно, то, что ваш разработчик подразумевает под «невозможным», заключается в том, что вашему приложению всегда требуется фактическое местоположение пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...