В конфигурации можно поставить галку и фоновый сервис будет запускать вместе с программой. Это постоянно висящий процесс, который работает даже когда программа закрыта. Можно настроить его выключение при полном завершении основного приложения либо он может работать даже если основное приложение выгружено из памяти (тогда завершить его можно вручную в шторке уведомлений). Надо сказать что в платформе и так уже есть фоновые сервисы – по расписанию и асинхронное выполнение скриптов питона, но технологически это другие сервисы и функционал у них другой. Это – неубиваемый foreground service к нему у Андроида особое отношение. Кроме того обработчики в этом сервисе и на 1С и на Python, а не только на Python.
Сервис предназначен для приема событий извне или внутри программы и выполнения действий во всей области приложения.
События которые регистрирует сервис:
- события штрихкода Bluetooth в режиме SPP, сканер ТСД через подписку на интент (не HID)
- Голосовой ввод команд в фоне
- Подписка на сообщения от любой другой программы. Например от сканера меток или какого то сервиса.
- Любая команда через встроенный в приложение веб сервис.
- Любая команда из Экрана или ActiveCV, события из других обработчиков например по расписанию
Виды управления, доступные в обработчике сервиса:
- исполнить общую команду без контекста : озвучка текста, звук, тост и т.д. См. «Общие команды» . Все что без контекста будет исполнено даже если приложение закрыто, заснуло. Например Переменные.Вставить(“toast”,”Привет мир”) выведет это сообщение поверх других программ
- диалог поверх любых окон в программе. В любом режиме (во время работы с процессом, в Active CV, просто в меню) будет выведен кастомный модальный диалог, результат нажатия вернется в сервис «onResultPositive», «onResultNegative». Работа с диалогом стандартная.
- запуск голосового ассистента. См. далее Голосовой ассистент.
- запустить процесс и экран. Запускает любой процесс и любой экран процесса командой "ShowProcessScreen" в значении надо указать JSON с процессом и экраном. Например так: Переменные.Вставить("ShowProcessScreen","{""process"":""Некий процесс"",""screen"":""Экран 1""}");
- сгенерировать событие ввода для экрана или ActiveCV или например для плиточного главного экрана. Т.е. можно передать команду и управление действующему процессу.
Фоновый голосовой ассистент
Это не совсем такой ассистент как Гугл или Алиса, в том плане что активируется он не по голосовой команде, а по событиям от сервиса – например сканированию штрихкода или каким то другим. Т.е. он слушает микрофон в фоне но после того как получил команду, а не постоянно прослушивает микрофон для активации.
Основное назначение фонового голосового ввода – освободить руки в моменты, где программа может что то спросить и получить ответ – спросить «да/нет» на заданный вопрос (например, «Завершить приемку?»), спросить количество, спросить готовность начать процесс и т.д. Это несложные для системы распознавания тексты, которые обрабатываются потом в вашем коде 1С или Python. С помощью фонового сервиса создается многоплановый интерфейс – на первом плане экраны или ActiveCV, фоном озвучка и чтение речи и еще поверх могут быть выведены диалоговые элементы. Это локальные вставки голоса и распознавания речи в тех местах где это уместно, а не классический pick-by-voice где голосовой интерфейс полностью заменяет визуальный интерфейс. Например вы можете сказать «покажи план-факт» и она откроет экран «план-факта» на устройстве а не будет перечислять голосом сколько еще осталось сканировать. Т.е. эти вставки дополняют интерфейс, делают его более удобным.
Управление процессами и экранами
Из фонового сервиса можно запустить любой процесс конфигурации и открыть в нем любой экран с помощью команды ShowProcessScreen. Например можно отсканировать документ и начать работать с ним ничего ен нажимая в меню, отсканировать метку ворот и начать приемку, отсканировать этикетку груза и начать процесс работы с ним. Ну и т.д. Голосовой ассистент может показывать экраны. Сканирование RFID может запустить процесс на ТСД. В общем применений много.
Генерация событий для процессов
В обработчике сервиса можно генерировать события ввода для текущих экранов или шагов Active CV т.е. передавать управление. Например в видео результат распознавания голоса генериует событие для ActiveCV (аналогично можно сделать для экрана) и оно обрабатывается уже в обработчике ввода там.
Кстати можно генерировать события обновления для плиток главного меню. Можно сделать например конфу с главным меню в виде плиток с количеством отсканированных объектов и обновлять счетчики на плитках со сканера вообще не запуская экраны. Т.е. ходить, сканировать и на плитках будет выводиться «отсканировано столько то и столько то».
Диалоги в любом месте программы в любое время
Можно получив событие извне вывести модальный диалог (а он полностью переопределяемый – туда можно натолкать все что угодно) поверх люого экрана программы – процесса, меню и active cv. Т.е. например можно вывести вопрос «Примешь задание такое то?» или наоборот оповещение о том что коллективная сборка заказа подходит к концу.
Фоновый «общий модуль» с возможностью асинхронного выполнения и возврата коллбека отправителю
Ну и наконец можно выполнять длительные процессы и передать управление по их завершению или выполнять какие то иные действия. Всегда по рукой есть модуль в фоне в котором можно что то параллельно основному UI-потоку запустить при желании получив событие завершения.
Прочие дополнения в релизе
- Теперь можно отключать верхний заголовок экрана. Задается на уровне экрана. Актуально для маленьких экранов.
- В главном меню команды меню влезают в заголовок в зависимости от разрешения. Актуально для маленьких экранов
- Можно переопределять шапку штрихкодов в ActiveCV – актуально для длинных штрихкодов. Например можно выводить только значащие символы или вообще свою метку. Делается через список "object_caption_list". Например Переменные.Вставить("object_caption_list","[{""object"":""4602193012608"",""caption"":""12608""}]");
- Можно задавать списки ActiveCV не через «;» а через «>>>» - для случаев когда «;» встречается в штрих-коде