Использование средств геолокации в Android для создания финтес-игры

Предыстория

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

Фитнес-игра – целый жанр игр, преимущественно для мобильных устройств, способствующих поддержанию здоровья игрока. Этот жанр позволяет игрокам геймифицировать процесс своих тренировок в том или ином виде: какие-то игры рассчитаны на конкретную активность, другие – позволяют комбинировать разные занятия. Третьи – предлагают свои собственные виды активности для игрока.

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

Из известных игр такого жанра можно назвать Zombies, Run! (2012), Ingress (2013), Pokémon Go (2016).

Примерно такую игру и предполагается разработать.

Постановка задачи

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

Ниже представлены базовые блоки функционала:

  1. Обработка геолокации

  2. Управление воспроизведением аудио

  3. Движение игрока по сюжетной линии

  4. Ядро управления геймификацией активности 

  5. Базовый пользовательский интерфейс

  6. Отслеживание и ограничение длительности игровой сессии

  7. Околостудийная запись звукового сопровождение сюжетных линий

Подписки и геолокация

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

ОС Android позволяет приложениям подписываться на широковещательные сервисные сообщения (Broadcast), которые содержат в себе разные технические атрибуты, например, текущую геолокацию устройства. Здесь и далее будем называть это «подпиской». Для подписки на такие сообщения может потребоваться получить разрешение пользователя.

Для работы с геолокацией устройства в Android есть несколько методов:

  • Получение текущей геолокации

  • Подписка на события для заданных геоточек (geofencing)

Получить текущую геолокацию возможно как единоразово (в ручном режиме), так и подписаться на ее обновления (с помощью broadcast).

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

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

Теперь стоит осветить работу с Geofences – механизмом управления событиями на основе заданных геоточек.

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

Доступны следующие типы событий:

  • Вход в область 

  • Выход из области

  • Нахождение в области

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

Для целей разработки нашей игры нам требуются оба метода работы с геолокацией (постоянное получение и подписка на события geofences).

Результат

В процессе тестирования работы с данными геолокации мы пришли к следующим выводам:

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

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

  3. Частота проверки и обработки событий geofences зависит от частоты получения broadcast с текущей геолокацией. Так, при отключении фонового отслеживания геолокации, скорость обработки событий geofences снижается за счет снижения частоты опроса датчиков геолокации. (см. п. 1)

  4. Погрешность в точности геолокации влияет на ошибки в обработке событий geofences (устройство могло физически пройти сквозь заданную область, но событие не было вызвано).

Дальнейшие шаги

Основной задачей является снижение рисков ошибочного определения активности пользователя из-за погрешности в работе GPS и частоты обработки событий geofencing.

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

Эти данные будут объединены с текущим контекстом сюжета внутри ядра управления геймификацией активности. Мы назвали его АИД – адаптивный интуитивный движок. На основе всех этих данных он будет управлять процессом игры и поддерживать геймификацию активности игрока. Его реализация – следующая задача после отслеживания активности и повешения точности геолокации.