ios smart location tracker и разрядка батареи

Я создаю трекер активности, похожий на приложение «Moves», которое отслеживает шаги, расстояние, калории и время активности.

Для устройств Iphone5s + я использую встроенный чип M7 для определения шагов, а затем делаю на их основе оценки. Для устройств M7 никогда не использую GPS. Практически нет разряда батареи, и интерполированные числа достаточно разумны для необходимости. Это достаточно разумно для получения данных о ходьбе / беге.

Однако для поддержки хотя бы Iphone5 и Iphone4 мне нужно использовать GPS для определения местоположения, а затем интерполировать шаги и калории на расстоянии. Я сталкиваюсь со значительными проблемами разряда батареи (отчасти ожидаемыми), и я ищу совета, как это минимизировать. Я также использую акселерометр в дополнение к скорости, чтобы сделать обоснованное предположение о типе активности (ходьба, бег, езда на велосипеде, транспорт).

Некоторые вещи, которые я пробовал для оптимизации GPS:

  1. Отложенные обновления: Iphone5 и минимальная версия IOS поддерживают это. Код для этого прост, однако остается под вопросом, действительно ли устройство его использует. Я видел, как он работает только на 1 из 4 устройств, где работает регулярно. Еще 3 устройства никогда не откладывали обновления из того же кода. Другой пользователь предложил другие приложения, предотвращающие переход устройства в спящий режим, в том числе, когда у меня также была установлена ​​функция «Moves». Таким образом, помимо теории, это не помогло.
  2. Уменьшить точность: снизить точность непрерывного опроса местоположения. Я начал с высокого уровня, но затем сократился до 10 метров, затем до сотен метров и т. Д. Это, похоже, не помогает, и в любом случае опрос все равно происходит с регулярным интервалом.
  3. startMonitoringSignificantLocationChanges: чтобы уменьшить количество бесконечных опросов GPS, когда пользователь может не двигаться в течение нескольких часов (особенно ночью), я переключился с непрерывного опроса на значительные изменения только после того, как устройство перестало двигаться в течение произвольные 2 минуты. Затем я снова включаю непрерывное отслеживание после любого значительного обновления местоположения. Это работает почти так, как ожидалось - если отслеживание прекращается, разрядка батареи замедляется, а когда она возобновляется непрерывно, разрядка батареи возобновляется. Кроме того, если пользователь начинает ходить, в течение некоторого времени нет гарантии значительного движения. Это очень плохо для точности. Иногда кажется, что это вообще не возобновляется.

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

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

ПРОЦЕСС ОБНОВЛЕНИЯ: startMonitoringSignificantLocationChanges. Я установил это с помощью таймера, который переключается на значительный мониторинг после 2 минут бездействия (без движения). Затем обычное отслеживание местоположения возобновляется снова при любом значительном изменении или когда приложение становится активным после повторного открытия. Кажется, это хорошо работает. Мой телефон все еще переходит со 100% до 10% за 8 часов без дела. Это старый iphone с некоторыми проблемами с аккумулятором, но обычно он может просто потерять 30-40% незаряженной за ночь без запущенных приложений. Мне нужно протестировать больше, но startMonitoringSignificantLocationChanges по-прежнему использует некоторую батарею.

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

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

ПРОГРЕССНОЕ ОБНОВЛЕНИЕ 2:

Существенные обновления, описанные выше, имеют для меня фатальный недостаток: они не всегда запускаются достаточно быстро. Иногда кажется, что это занимает 1-2 мили!

В качестве более подходящего подхода я попытался поддерживать постоянное обновление местоположения, но переключая свойство "желаемой точности" с высокой на низкую точность, когда устройство не движется. По сути, это должно выключить приемник GPS во время бездействия. Я экспериментировал с точностью от 100 до 1 км для бездействия с многообещающими результатами. Кажется, что он использует немного больше теста, чем только при использовании мониторинга значительных изменений, но он также кажется более отзывчивым.


person Miro    schedule 30.06.2014    source источник
comment
Не могли бы вы прокомментировать, сколько часов работает Moves, пока батарея не разрядится. А сколько часов ваше текущее приложение?   -  person AlexWien    schedule 01.07.2014
comment
Мне нужно будет проверить это сравнение. Активная разработка на одном устройстве означает, что каждый день требует тестирования в течение всего дня. Возможно, на выходных я смогу провести эти посвященные тесты.   -  person Miro    schedule 02.07.2014
comment
Хорошо, я тестировал в увлекательном туре. Батареи хватило на дольше, чем моя физическая форма (или продолжительность запланированного похода), поэтому через 8 часов батарея все еще оставалась.   -  person AlexWien    schedule 02.07.2014


Ответы (1)


Ничего из предложенных вами выше решений не работает. Вам нужен GPS, и он включен, если вы указали полную точность (CLLocationAcuracyBest).

Если я правильно помню, есть разница между CLLocationAcuracyBest и CLLocationAcuracyBestForNavigation в том смысле, что последний дополнительно использует датчик ускорения, который в сумме использует больше батареи.

Нет режима GPS на половину батареи!
Чип GPS включен или нет.

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

На Iphone4 такое приложение GPS с полной точностью (например, мое) работает около 8 часов, пока батарея не разрядится.

8 часов достаточно, если у пользователя есть преимущества приложения.

person AlexWien    schedule 01.07.2014
comment
Вы знаете, какой уровень точности будет использовать исключительно Celltower + Wi-Fi? Или на этот счет нет никаких гарантий? - person Miro; 01.07.2014
comment
Из документации Apple: установка желаемой точности для событий определения местоположения на один километр дает диспетчеру местоположения гибкость, позволяющую отключать оборудование GPS и полагаться исключительно на Wi-Fi или сотовую радиосвязь. Отключение оборудования GPS может привести к значительной экономии энергии. - person Miro; 01.07.2014
comment
Нет никаких гарантий, но да, 1 км будет использовать вышку сотовой связи в городах, но можно использовать GPS в сельской местности, потому что там вышка сотовой связи часто находится в 3 км. - person AlexWien; 01.07.2014