Миссия Невыполнима: Геолокация На Android Без Разрядки Аккумулятора

Пользователь: это невозможно, GPS съест батарею Джуниор: возможно, используй геозоны Сеньор: есть варианты получше

Миссия невыполнима: геолокация на Android без разрядки аккумулятора

На снимке сначала в одну, а затем в другую сторону одновременно «шли» 6 одинаковых телефонов с одним человеком.

Но какой другой результат! Геолокация используется в самых разных задачах.

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

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

В нашем случае этот сценарий осложняется тремя абсолютно взаимоисключающими вещами:

  1. Малый радиус.

    Требуется определить тот факт, что пользователь зашел на достаточно малый радиус территории – 500 метров.

  2. Высокая вероятность.

    Требуется очень ненулевая вероятность того, что пользователь не выйдет за пределы радиуса.

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

  3. Минимальное энергопотребление.

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

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

    Поэтому требования к энергопотреблению самые высокие.

В общем, сам сценарий, конечно, с технической точки зрения чудовищный.

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

Здесь во многих случаях придется висеть в фоновом режиме (если того захочет разработчик родительского приложения) и поэтому обычное Рекомендации Google по использованию местоположения по сути бесполезен.



Итак, есть проблема.

Но есть ли решение?

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

Как в формуле «время-цена-ресурсы развития» можно уменьшить только два параметра, так и надо чем-то пожертвовать.

Учитывая, что 500 метров в принципе константа, давайте «освободим» вероятность определения входа в радиус немного вниз с 1,0.

Миссия невыполнима: геолокация на Android без разрядки аккумулятора

Без включенного GPS знайте, когда пользователь пересекает красный радиус.

Действительно? Изначально есть по сути три основных варианта — коробочное решение от Google с использованием Geofences, использование Google Services, встроенных в Android, со своим алгоритмом или использование открытого гео-API, опять же со своим алгоритмом.

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

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



Участники гонки на выживание

1. Пассивный режим Служб Google — прием только обращений к геоданным, закешированным системой, от других приложений.

Это могут быть либо вызовы местоположения по сети — Wi-Fi в пассивном и активном режиме, мониторинг вышек сотовой связи, либо использование GPS. 2. Службы Google GPS - старый добрый всепоглощающий GPS 3. Мыльников Провайдер — реализация с использованием открытого API через сети Wi-Fi от мыльников (Хотелось бы сразу сказать огромное спасибо за многочисленные консультации и полезные статьи ).

Использование API , работающий с базой данных, агрегированной из нескольких геобаз через Wi-Fi. Это особенно интересно в тех случаях, когда вы хотите избежать использования разрешений ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION (достаточно только ACCESS_WIFI_STATE), поскольку оно напрямую использует списки сетей Wi-Fi. Правда, для Android 6.0 это уже не очень актуально, поскольку для сканирования сетей теперь требуется еще и ACCESS_COARSE_LOCATION. 4. Геозоны сервисов Google Собственная реализация Google путем определения того, находится ли пользователь в радиусе действия; позволяет определить географические зоны, при входе в которые приложение будет ловить соответствующее событие.

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

На большинстве устройств используется только сетевое местоположение (Wi-Fi + вышки сотовой связи).

5. Комбинированный режим сервисов Google — сбалансированный режим работы Google Services Passive mode + принудительный запрос координат через Wi-Fi и вышки сотовой связи, если мы видим, что нас больше не устраивает актуальность кэшированных данных.

6. i402 — реализация 402 Таргетинг Рус: Сервисы Google Комбинированный режим + адаптивный режим регулировки частоты сканирования (от 1 минуты до 24 часов) в зависимости от удаленности пользователя от ближайшего радиуса

Калибровка

Для тестирования нам понадобятся наборы из 7 одинаковых моделей телефонов.

Все телефоны брались новые, без дополнительно установленного ПО.

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

Каждый цикл калибровки и тестирования начинается с полной зарядки телефонов.

Все измерения производятся при температуре не ниже +15. Калибровка занимает неделю, что вновь позволяет обрести уверенность в том, что батареи всех телефонов «раскачались» и достигли стабильного состояния.



Процесс калибровки проводится в два этапа.

Энажмите № 1 1. Настройки и ПО всех экземпляров в одинаковом состоянии, телефоны заряжены и помещены в одинаковые условия.

2. Подождите 24 часа.

3. Получение данных об остаточном заряде.

Экран №2 1. Настройки и ПО всех экземпляров в одинаковом состоянии, телефоны заряжены и помещены в одинаковые условия.

2. Во всех телефонах установлены SIM-карты одного и того же мобильного оператора.

3. Подождите 24 часа.

4. Получение данных об остаточном заряде.

Шаги №1 и №2 были выполнены в общей сложности за пять циклов на всех экземплярах.

По результатам был выявлен телефон с аномальным энергопотреблением и снят с тестирования.

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

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



6 заявок за 2 дня

Всегда приятно написать что-то маленькое, что сразу оживает. Подготовлено 6 сборок одного простого Android-приложения, использующих разные алгоритмы сбора геоданных.

Каждая сборка включает в себя реализацию варианта алгоритма, кнопку запуска/остановки, полное пошаговое журналирование, а также индикатор работоспособности экземпляра и сборки.

Индикатор представляет собой короткий звуковой сигнал раз в минуту, по сути писк.

Из-за этого испытательный мешок, наполненный испытуемыми образцами, постоянно издает странные звуки.

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

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

Ведь включать энергоемкий экран для выяснения ситуации при проведении тестирования – непозволительная роскошь и огромная неприятность.

Все сборки, кроме №4 и №5, запрашивают координаты раз в 10 минут. С одной стороны, это большое предположение, ведь пользователь транспорта может безопасно пересечь радиус 500 метров за гораздо меньшее время.

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



Тестовый танец!

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

Один образец из набора включен в контрольную группу и, следовательно, получает плацебо.

То есть на нем ничего не установлено.

Входные данные для всех экземпляров остаются общими: общий оператор сотовой связи, общий маршрут, общая тканевая сумка тестера.

Тряпичный был выбран специально, чтобы избежать возможных помех принимаемым сигналам.

Маршруты построены по разным рельефам, как в городской черте, так и за городом.

Есть маршруты на автомобиле, на транспорте, в метро, а также пешеходные маршруты.

Есть даже маршрут в районе, где по определению нет Wi-Fi и сотовой связи на пределе – удаленном от берегов Ладожского озера.



Миссия невыполнима: геолокация на Android без разрядки аккумулятора

В этом цикле самым сложным было не утопить сумку испытателя во время шторма.



Полученные результаты?

Полевые исследования занимают более двух недель.

Выходные данные каждого алгоритма оцениваются по двум параметрам: ТОЧНОСТЬ – экспертная оценка по 5-балльной шкале в сравнении с эталоном (чем больше, тем лучше).

Как определяется точность? После каждого цикла тестирования загружаются логи каждого экземпляра, геоданные конвертируются и отображаются на Google Maps. На основании эталона, т.е.

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

Экспертная оценка проверяется и подтверждается вторым экспертом.

Посчитать величину отклонения в автоматическом режиме невозможно из-за недетерминированности таймера пробуждения в Android и последующей десинхронизации устройств, а также сложности многих маршрутов - например, дважды повернув налево в сравнительно небольшой период времени для алгоритма или «телепортации с помощью метро».

«ЭНЕРГЕТИЧЕСКАЯ» ЭФФЕКТИВНОСТЬ – процент заряда аккумулятора устройства после завершения цикла тестирования приводится по общей 10-балльной шкале (чем выше, тем лучше) от 0 (худший уровень заряда экземпляров комплекта в цикле) до 10. (лучший уровень экземпляров комплекта в цикле).

Почему для определения энергоэффективности не используется профилировщик? Из-за отсутствия доверия к ним.

Энергопотребление конкретного приложения, отображаемое в настройках телефона, или показания специализированного ПО так или иначе включают в себя набор ошибок и допущений.

Поскольку нас интересовали необработанные данные, мы постарались сосредоточиться на основных параметрах.

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

Ниже приведены средние значения параметров.

Медианные значения не приводятся, так как из-за повторяемости тестов они близки к средним.



1. Пассивный режим Служб Google.
ТОЧНОСТЬ: 3,4 (4 место) «НЕРГО»ФФ.

: 4,3 (5 место) Средний по точности.

Позволяет определить общую траекторию маршрута.

По энергоэффективности он предпоследний, но с большим отставанием от последнего участника — GPS (4,3 против 2,1).

Точность во многом зависит от того, установлено ли на смартфоне стороннее программное обеспечение или системе почти нечего кэшировать.

Если последнее, то система может кэшировать только собственные периодические системные запросы.

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



2. GPS-сервисы Google
ТОЧНОСТЬ: 4,6 (2 место) «НЕРГО»ФФ.

: 2,1 (6 место) Он показывает предсказуемо отличную точность (кроме метро), но и предсказуемо дорог: во всех тестах он показал худшую энергоэффективность.



3. Мыльников Провайдер (только Wi-Fi)
ТОЧНОСТЬ: 2,2 (6 место) ЭНЕРГОЭФФ.

: 6,2 (3 место) Низкий результат точности объясняется наличием маршрутов за пределами города, где нет сетей Wi-Fi. Одновременно с использованием API вышки сотовой связи он может демонстрировать хорошую точность и низкое энергопотребление.



4. Геозоны сервисов Google
ТОЧНОСТЬ: 5,0 (1 место) ЭНЕРГОЭФФ.

: 6,8 (2 место) Стабильная статистика качественного определения болот радиусом 500 метров.

Стоит предупредить, что на линзах меньшего радиуса тестирование не проводилось.

Судя по некоторым экспериментам зарубежных коллег и даже по самой документации, на фэнах менее 150 могут возникнуть проблемы с точностью и/или энергопотребление значительно возрастёт. Но даже на 500 метрах энергопотребление могло бы быть ниже, учитывая, что это системная функция.



5. Комбинированный режим сервисов Google
ТОЧНОСТЬ: 3,6 (3 место) ЭНЕРГОЭФФ.

: 5,5 (4 место) Были некоторые ошибки относительно эталонного GPS, но в целом стабильно.

Хотелось бы, чтобы энергопотребление было лучше.



6.i402
ТОЧНОСТЬ: 3,1 (5 место) ЭНЕРГОЭФФ.

: 8,5 (1 место) Он показал предсказуемо плохую аппроксимацию на участках, удаленных от расположения радиусов, так как в местах, удаленных от радиусов, снизил частоту проверок - за что получил низкую оценку.

При этом он превзошел конкурентов по энергоэффективности; в 2-х длительных тестах (более суток) показал экономию более 5-7% заряда батареи от ближайшего конкурента.

При решении основной задачи — проверке входа в радиус — он почти всегда ловит идущих и с достаточной вероятностью едущих.



Общий

Google Services Geofences по-прежнему заняли первое место по сочетанию ТОЧНОСТИ/ЭНЕРГОЭФФЕКТИВНОСТИ.

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

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

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

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



GPS, до свидания?

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

Попробуйте отключить GPS в настройках телефона и открыть Яндекс.

Карты – они достаточно точно определят ваше местоположение.

Причём даже при выключенном Wi-Fi - только если в настройках не отключено сканирование сетей Wi-Fi (появилось начиная с Android 4.3).

Но у большинства пользователей она включена.

Откройте Google Maps и ваше местоположение будет определено еще точнее.

Установите какой-нибудь трекер сети Wi-Fi и гуляйте или ездите по городу — ваш смартфон поймает тысячи сетей Wi-Fi.

Миссия невыполнима: геолокация на Android без разрядки аккумулятора

Мы попросили коммерческого директора установить на день трекер Wi-Fi сети.

В зависимости от качества источника (Google или открытые базы данных) и топографии города точность Wi-Fi составляет около 30-50 метров.

Согласитесь, это на порядок лучше, чем сотовые сети, которые в городе имеют точность не более 300-400 метров.

Для большинства приложений достаточно точности в 30-50 метров, а потому тянуть всепоглощающий GPS совершенно незачем.

Хотя некоторые долгосрочные тесты показали, что у GPS-модуля осталось 15 % заряда, у лучшего конкурента осталось 57 % заряда — почувствуйте разницу!

Так что насчет решения?

Конкретно для промышленного внедрения был выбран i402 — сейчас он используется в одной из сетей мобильной рекламы 3-го поколения ( Хабр: Рекламные сети 3.0 ).

i402 — это, напомню, комбинация следующего:

  • получение кэшированных в системе обращений к данным GEO из других приложений (включая данные GPS, если их включило какое-либо другое приложение)
  • явный запрос координат через Wi-Fi и/или вышки сотовой связи, если кэшированные данные устарели
  • плавающая частота явного запроса в зависимости от удаленности пользователя от ближайшего радиуса
При стандартном использовании приложение со встроенным SDK, содержащее реализацию i402 и постоянно работающее в сервисном режиме, потребляет в пределах 5% заряда батареи в сутки.

Для реализации адаптивности и интеллекта нам пришлось решить множество других интересных задач, таких как борьба с «телепортацией» метро или «телепортацией» аэропортов (ведь предсказать, где кто-то войдет в метро через 30 минут, сложнее чем сделать то же самое для автомобилиста, который обычно стоит в пробках) и, скажем, придумать множитель для значения периода обновления координат в состоянии покоя.

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

Но об этом – в отдельной статье.

Теги: #GPS #GPS трекер #Геоинформационные сервисы #Android #рекламные сети #Разработка сайтов #Системы глобального позиционирования #Разработка мобильных приложений #Разработка Android #Геоинформационные сервисы
Вместе с данным постом часто просматривают: