Разработка мобильных приложений на платформе 1С часто сопряжена с нюансами работы операционной системы Android, особенно когда речь идет о фоновых процессах. Типичная ситуация: в приложении «1С:Запуск» (утилите для разработчика) сбор координат работает идеально, но стоит собрать полноценный APK-файл, как получение данных прекращается сразу после сворачивания окна. В этой статье мы подробно разберем причины такого поведения и пошагово реализуем решение, которое позволит вашему приложению стабильно работать в фоне.
Для начала рассмотрим программный код, который обычно используется для инициализации сбора геопозиции. Платформа предоставляет штатный метод для подключения обработчика. Разберем пример кода, который часто применяется в модуле управляемого приложения или в обработке:
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаИзмененияМестоположения", ЭтотОбъект);
СредстваГеопозиционирования.ПодключитьОбработчикИзмененияМестоположения(
ОписаниеОповещения,
"gps",
,
1
);
Здесь мы указываем, что хотим получать данные от спутников gps с минимальным интервалом в 1 секунду. Проблема заключается в том, что когда приложение свернуто, Android стремится максимально снизить энергопотребление. Разберемся, почему поведение «1С:Запуск» отличается от собранного APK.
Многие разработчики ошибочно полагают, что APK-файл и приложение внутри мобильной платформы 1С должны вести себя идентично. Однако проанализируем ситуацию глубже:
Одной из наиболее неочевидных причин сбоя является зарегистрированная ошибка в некоторых релизах мобильной платформы (например, 8.3.18, 8.3.19). Суть проблемы заключается в том, что штатный механизм геопозиционирования не всегда корректно сообщает системе Android о необходимости создать Foreground Service. Рассмотрим пошагово, как это исправить.
Как показывает практика и опыт разработчиков, для решения проблемы необходимо в свойствах мобильной конфигурации включить флаг «Запись аудио в фоновом режиме». Казалось бы, как связана аудиозапись и GPS? Дело в том, что активация этой настройки принудительно заставляет платформу 1С регистрировать ту самую «заметную службу» в Android. Это дает приложению легальное право продолжать выполнение кода и обращение к датчикам, даже если экран заблокирован.
Чтобы приложение работало корректно, проанализируем настройки, которые необходимо выставить при сборке APK в «Сборщике мобильных приложений» или в свойствах конфигурации:
Даже если программная часть выполнена верно, настройки самой ОС могут блокировать получение данных. Разберем, что необходимо проверить на конечном устройстве (смартфоне):
1. Разрешение «Разрешить в любом режиме». Зайдите в «Настройки» -> «Приложения» -> «Ваше приложение» -> «Разрешения» -> «Местоположение». Убедитесь, что выбран вариант «Разрешить в любом режиме» (Allow all the time). Если выбрано «Разрешить только во время использования», координаты в фоне приходить не будут.
2. Оптимизация батареи. Android по умолчанию пытается «оптимизировать» приложения. Найдите раздел «Батарея» или «Экономия заряда», выберите ваше приложение и установите режим «Не экономить» или «Без ограничений». Это предотвратит принудительную остановку процесса системы через некоторое время после сворачивания.
Если после всех манипуляций данные приходят нестабильно, проанализируем комбинированный метод, который используют опытные разработчики. Вместо того чтобы полагаться только на автоматический обработчик, можно добавить «будильник» для системы.
Используем ПодключитьОбработчикОжидания, который будет раз в несколько минут вызывать процедуру, принудительно опрашивающую последнее местоположение. Это помогает «встряхнуть» службу геопозиции, если она начала засыпать:
Процедура ПринудительныйОпросКоординат() Экспорт
Данные = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение();
Если Данные <> Неопределено Тогда
// Обработка полученных данных
КонецЕсли;
КонецПроцедуры
Также хорошей практикой является использование Уведомлений. Наличие активного уведомления в строке состояния Android является сильным сигналом для системы о том, что приложение выполняет важную работу и его не следует закрывать.
Для стабильного получения GPS-координат в APK-файле 1С нам необходимо выполнить три условия:
Соблюдение этих правил позволит вашему мобильному решению на базе 1С работать так же стабильно, как и нативные Android-приложения, обеспечивая точный трекинг в любых условиях.