Как реализовать голосовой ввод в мобильном приложении 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке мобильных решений на платформе 1С часто возникает задача ускорить ввод текстовой информации — например, при заполнении комментариев, описаний неисправностей или адресов. Одним из удобных способов решения является использование системного механизма распознавания речи операционной системы Android с помощью объекта ЗапускПриложенияМобильногоУстройства.

Разберем типичные ошибки при настройке интента (Intent), рассмотрим правильный рабочий код и изучим способы извлечения распознанного текста.

Анализ типичных ошибок при вызове RecognizerIntent

Проанализируем частую ситуацию, когда разработчик пытается запустить голосовой ввод, но метод возвращает 0 и диалог распознавания не открывается:


НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.RecognizerIntent.ACTION_RECOGNIZE_SPEECH";
НовВз.Категория = "android.intent.category.RecognizerIntent";
Сообщить(НовВз.Запустить(Истина));

Выясним причину такого поведения:

  1. Неверная строка действия: константа Android RecognizerIntent.ACTION_RECOGNIZE_SPEECH на системном уровне имеет строковое значение "android.speech.action.RECOGNIZE_SPEECH". Использование полного имени Java-константы вместо строкового значения приводит к тому, что система не находит подходящего обработчика.
  2. Ошибочная категория: строка "android.intent.category.RecognizerIntent" не существует в спецификации Android. Для распознавания речи свойство Категория заполнять не требуется.
  3. Код возврата 0: при синхронном вызове метода Запустить(Истина) возвращается системный код результата Activity (resultCode). Значение -1 (RESULT_OK) свидетельствует об успешном распознавании, а 0 (RESULT_CANCELED) возвращается при отмене действия пользователем либо в случае, когда на устройстве отсутствует или отключен сервис распознавания речи.

Пошаговая реализация голосового ввода через ЗапускПриложенияМобильногоУстройства

Посмотрим на корректный пример инициализации объекта и передачи необходимых дополнительных параметров:


ЗПМУ = Новый ЗапускПриложенияМобильногоУстройства("android.speech.action.RECOGNIZE_SPEECH");
ЗПМУ.ДополнительныеДанные.Добавить("android.speech.extra.LANGUAGE_MODEL", "free_form");
ЗПМУ.ДополнительныеДанные.Добавить("android.speech.extra.MAX_RESULTS", 1);
ЗПМУ.ДополнительныеДанные.Добавить("android.speech.extra.PROMPT", "Говорите...");
ЗПМУ.ДополнительныеДанные.Добавить("android.speech.extra.LANGUAGE", "ru-RU");

КодВозврата = ЗПМУ.Запустить(Истина);

Рассмотрим подробнее назначение переданных параметров:

  1. android.speech.extra.LANGUAGE_MODEL: модель распознавания речи. Значение "free_form" указывает на распознавание произвольной свободной речи.
  2. android.speech.extra.MAX_RESULTS: максимальное количество возвращаемых вариантов распознавания текста (в примере установлено 1 для получения наиболее точного совпадения).
  3. android.speech.extra.PROMPT: текстовая подсказка, отображаемая пользователю в стандартном системном диалоговом окне записи.
  4. android.speech.extra.LANGUAGE: явное указание локали распознавания речи (например, "ru-RU").

Получение и обработка результата распознавания

После успешного завершения записи (когда метод Запустить(Истина) возвращает -1), распознанные данные помещаются в коллекцию ДополнительныеДанные объекта ЗапускПриложенияМобильногоУстройства.

Разберем пример извлечения итогового текста:


Если КодВозврата = -1 Тогда
    Результаты = ЗПМУ.ДополнительныеДанные.Получить("android.speech.extra.RESULTS");
    Если Результаты <> Неопределено И Результаты.Количество() > 0 Тогда
        РаспознанныйТекст = Результаты[0];
        Сообщить("Распознано: " + РаспознанныйТекст);
    КонецЕсли;
Иначе
    Сообщить("Ввод отменен или сервис распознавания недоступен.");
КонецЕсли;

Ограничения и альтернативные подходы

При использовании вызова через Intent важно учитывать технические особенности механизма:

  1. Платформенная зависимость: данный способ работает исключительно на устройствах под управлением Android.
  2. Наличие сервиса распознавания: на мобильном устройстве должны быть включены сервисы распознавания речи (например, Google Speech Services). В зависимости от настроек системы может потребоваться активное интернет-соединение.
  3. Модальность диалога: вызов прерывает работу с текущей формой 1С и открывает стандартный системный диалог записи поверх приложения.

Если требуется кроссплатформенность или непрерывный ввод, рассмотрим альтернативные варианты:

  1. Штатный сервис распознавания речи 1С: использование встроенных возможностей платформы 1С:Предприятие для потокового или облачного распознавания.
  2. Внешняя компонента для мобильной платформы: разработка native-компоненты на Java для работы с классом android.speech.SpeechRecognizer, что позволяет кастомизировать интерфейс и получать промежуточные результаты ввода.
  3. Системная экранная клавиатура: использование встроенного микрофона на клавиатуре устройства (Gboard, Samsung Keyboard, клавиатура iOS), что не требует дополнительного кода в конфигурации и работает в любых стандартных полях ввода.
← На главную