C26Capture 2026Knox Capture Knowledge Base

Samsung Knox Capture: установка, настройка кнопок, тестирование и интеграция в Android-приложение

Дата практического прогона: 23 сентября 2026 года.

Это полный практический гайд и отчёт живого сравнения двух телефонов: rugged Samsung Galaxy XCover7 Pro (SM-G766B) и обычного Galaxy A18 (SM-A185F). Мы проверили установку без повторного входа в Google Play, все разделы меню, аппаратные и экранные триггеры, QR/Code 128, уменьшенные, размытые, низкоконтрастные, повёрнутые и повреждённые коды, keyboard wedge и способы интеграции в Android. Для каждого опыта сохранены скриншоты с обоих аппаратов, ADB baseline и logcat.

Что получилось

Параметр Значение
Устройства Samsung SM-G766B (xcover7pro) и SM-A185F (a18)
Android 16 / 17
Security patch 2026-07-05
Knox Capture 2.6.00.0, version code 260000000
Тестовое приложение com.example.knoxwedgetest, версия 1.0.1
Профиль Wedge Test
Тестовый QR ABC-1234
Результат ABC-1234 появился в поле Barcode
Медиана чистого QR после прогрева 882.68 ms / 1112.40 ms
Повреждённая серия оба телефона: 6 успехов из 9 условий
Crash / ANR не обнаружены

Первоначальный XCover-прогон дал 1985 ms. Сравнение ниже использует исправленную версию тестового приложения и отдельные серии. Метрика измерена от наблюдаемого trigger до изменения EditText; она включает открытие preview, экспозицию/фокус, распознавание и вывод, а не только работу декодера.

1. Установка

Knox Capture устанавливался из Google Play по package name com.samsung.android.app.smartscan. После установки на странице появились кнопки «Удалить» и «Открыть».

Knox Capture установлен из Google Play

Проверка через ADB:

adb shell pm path com.samsung.android.app.smartscan
adb shell dumpsys package com.samsung.android.app.smartscan \
  | grep -E 'versionCode=|versionName=|firstInstallTime=|lastUpdateTime='

Фактически зафиксировано:

versionName=2.6.00.0
versionCode=260000000
firstInstallTime=2026-09-23 17:01:25

Camera permission выдавался только при первом фактическом запуске scanner и только в режиме «При использовании приложения». Bluetooth и notification permissions для этого базового теста не требовались.

Как не входить в Google Play на каждом телефоне

Один раз установленный пакет был извлечён с XCover и поставлен на A18 через ADB:

adb -s R3CY10C02FH shell pm path com.samsung.android.app.smartscan
adb -s R3CY10C02FH pull \
  /data/app/.../com.samsung.android.app.smartscan.../base.apk \
  KnoxCapture-2.6.00.0.apk
sha256sum KnoxCapture-2.6.00.0.apk
adb -s R3GL50BX17T install KnoxCapture-2.6.00.0.apk

Наш проверенный APK:

размер: 38,506,001 bytes
SHA-256: 1858f5a5e710a46c5c646fb720acf5482a6461028dd8bf73c50f9d0fe5d5d712
package: com.samsung.android.app.smartscan
version: 2.6.00.0

На A18 приложение запустилось без Google-аккаунта и показало 100 из 100 бесплатных сканирований. Значит, для лабораторной партии можно использовать один проверенный APK. Но у sideload-установки installerPackageName=null, поэтому автоматическое обновление через Play не гарантировано. Для промышленного парка правильный путь — managed Google Play/EMM либо контролируемая рассылка и проверка хэша/версии APK. Копирование APK не отменяет коммерческое лицензирование Knox Capture.

Установка тестового приёмника

Одна и та же сборка KnoxWedgeTest-debug.apk 1.0.1 установлена на оба телефона. Её SHA-256:

7389be2322a80f9dbc665fe99bc94d5ccdb37db8febbeb39568303acde7d680d

Версия 1.0.1 обнуляет timestamp после каждого text_changed, поэтому следующий скан не наследует задержку предыдущего.

2. Профили: зачем они нужны

Knox Capture работает как программный keyboard wedge: камера распознаёт код, а результат передаётся целевому приложению так, будто пользователь ввёл данные с клавиатуры. Поведение определяется профилем:

  1. какие приложения и Activity используют профиль;
  2. какие типы штрихкодов распознаются;
  3. какой режим камеры применяется;
  4. как форматируются данные;
  5. добавляются ли Enter, Tab, prefix или suffix.

На главной странице остался системный профиль по умолчанию и появился отдельный профиль Wedge Test.

Главная страница со списком профилей

Создание тестового профиля

  1. На странице «Профили» нажать +.
  2. Выбрать «Создание профиля», а не дублирование существующего.
  3. Ввести имя Wedge Test.
  4. В списке приложений найти Knox Wedge Test.
  5. Выбрать приложение целиком — «Все действия».
  6. Нажать «Создать профиль».

В готовом профиле тестовое приложение видно в разделе «Приложения».

Профиль Wedge Test и привязанное приложение

При необходимости можно привязывать не весь package, а отдельные Android Activity. Это полезно, когда экран приёмки должен завершать скан нажатием Tab, а экран поиска — Enter. Одна Activity может принадлежать только одному профилю.

Выбор приложения для профиля

Полный разбор меню Knox Capture 2.6

Ниже — одно и то же меню на двух протестированных аппаратах.

XCover7 Pro Galaxy A18
Меню на SM-G766B Меню на SM-A185F

Knox Capture AR

Это не «ускоритель камеры» и не обязательная часть обычного сканирования. AR накладывает сведения на найденные коды прямо в preview и даёт два сценария:

  • Search and find — найти среди множества кодов позицию, совпавшую с поисковым условием;
  • View and update — показать или изменить поля товара, если настроены AR template и источник данных/сервер.

AR demo позволяет посмотреть View and update без backend, но это демонстрация с ограниченным числом сканов, а не готовая товарная база. AR configuration нужна администратору для шаблона, источника данных и поведения overlay.

XCover7 Pro Galaxy A18
Knox Capture AR на XCover Knox Capture AR на A18

Тестировать приложения

Test mode запускает выбранное приложение и рисует диагностический overlay. В нём видны Activity, применившийся профиль, тип вывода и raw/result data. Это первый инструмент проверки, когда сканер открылся, но строка не попала в нужный экран.

Список приложений Test mode

Импортировать

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

Предупреждение импорта

Триггеры сканирования камерой

Здесь включаются Samsung Keyboard, floating button, аппаратные клавиши, двойное нажатие Side key и запуск intent-ом бизнес-приложения. Полный разбор различий между rugged и обычным смартфоном дан в разделе о кнопках ниже.

XCover7 Pro Galaxy A18 без специальной клавиши
Триггеры XCover Триггеры A18

Подключить сканер

Это настройка внешнего аппаратного сканера, а не камеры телефона. Здесь сопрягается поддерживаемый Bluetooth-сканер; Samsung также документирует USB wedge devices. Чтобы он участвовал в профиле, внутри scanner settings включают Hardware scanner. Наличие Bluetooth-устройства само по себе не превращает камеру в аппаратный сканер.

XCover7 Pro Galaxy A18
Подключение scanner на XCover Подключение scanner на A18

Путь вывода

Этот пункт отправляет результат по Bluetooth на сопряжённый компьютер/устройство, эмулируя Bluetooth keyboard. В интерфейсе указано важное ограничение: функция работает с default scanning profile. Это не то же самое, что Android Intent output в своё приложение.

XCover7 Pro Galaxy A18
Output path XCover Output path A18

Наложение сканера

Scanner overlay — маленькое изменяемое и перемещаемое окно камеры поверх бизнес-приложения. Оно полезно, когда оператор должен видеть форму во время сканирования. По умолчанию выключено; приложению может понадобиться разрешение рисовать поверх других окон.

XCover7 Pro Galaxy A18
Scanner overlay XCover Scanner overlay A18

Лаборатория производительности

Performance Lab содержит экспериментальные опции для сложной сцены:

  • low-light notification — подсказка о недостатке света;
  • auto exposure — автоматическая коррекция экспозиции;
  • auto zoom — приближение найденного кода.

Auto zoom предназначен для automatic single scan и не применяется к continuous scan и scanner overlay. Эти переключатели нужно A/B-тестировать: они могут помочь на дальнем/тёмном коде, но изменить время стабильной простой сцены.

XCover7 Pro Galaxy A18
Performance Lab XCover Performance Lab A18

Удалить

Открывает список пользовательских профилей с чекбоксами и Все. Системный default profile в список удаления не попадает. Сам вход безопасен; удаление происходит только после выбора и подтверждения. В тесте мы ничего не удаляли.

XCover7 Pro Galaxy A18
Выбор профилей на XCover Выбор профилей на A18

Лицензия

Показывает активацию и остаток бесплатных сканов, позволяет применить временную или коммерческую лицензию. На свежей sideload-установке A18 было 100/100, на XCover после экспериментов — 78/100. Лимит нужно учитывать: диагностические попытки тоже могут расходовать бесплатные сканы.

Лицензия на A18

Поддержка

Содержит Quick help, Guides, FAQ, Courses, Release notes, Privacy, About и Contact support, а также путь к temporary license. Release notes особенно важны при сравнении результатов между версиями scanner engine.

Раздел поддержки

3. Параметры scanner

В профиле открываем Knox Capture в разделе «Сканер».

Параметры сканирующего модуля

Для первого теста использовались:

  • режим: одиночное сканирование;
  • выбор: автоматический;
  • камера: задняя;
  • zoom: 1.0;
  • звуковой сигнал: включён;
  • вибрация: включена;
  • Parse GS1: выключен.

QR уже был включён в наборе по умолчанию. В том же списке были активны Code 128, Code 39, EAN8, EAN13, PDF417, Data Matrix, UPCA, UPCE и Interleaved 2 of 5.

Выбор symbology

Тот же список на втором устройстве:

Типы кодов на Galaxy A18

Все типы кодов Knox Capture

По актуальной таблице Samsung scan engine поддерживает следующие symbology. Максимальная длина — предел данных, а «по умолчанию» — состояние нового профиля, которое администратор может изменить.

Тип Класс Максимальная длина Включён по умолчанию
Codabar 1D 23 нет
EAN-13 1D retail 13 да
EAN-8 1D retail 8 да
Interleaved 2 of 5 (ITF) 1D 50 да
UPC-A 1D retail 12 да
UPC-E 1D retail 8 да
GS1 DataBar-14 1D GS1 14 нет
GS1 DataBar Limited 1D GS1 14 нет
Code 128 / GS1-128 1D 41 да
Code 39 1D 33 да
Code 93 1D 50 нет
GS1 DataBar Expanded 1D GS1 46 цифр или 26 буквенно-цифровых нет
Data Matrix 2D 3095 да
PDF417 stacked 2D 1661 да
QR Code 2D 6738 да
Aztec 2D 1194 нет

Внутри отдельных типов доступны дополнительные настройки: inverted recognition (выключено по умолчанию), обязательные 2/5-digit add-ons для EAN/UPC, возврат UPC-E как UPC-A, Full ASCII для Code 39 и regex validation. Regex позволяет не просто прочитать код, а принять только допустимый формат; отклонённые значения можно подсветить в viewfinder.

Режимы камеры

  • Single scan / Automatic — первый уверенно найденный код сразу возвращается;
  • Single / Aim or tap — оператор выбирает код при сложной сцене;
  • Continuous — поток последовательных результатов;
  • Batch / Tap to select — выбор нескольких кодов в одном кадре.

Отдельно настраиваются прямоугольный или laser viewfinder, flash Off/On/Auto, zoom 1–4 и Parse GS1. GS1 parsing следует включать только если приложение ожидает разобранные application identifiers, а не исходную строку.

Что изменилось в последних версиях

В Knox Capture 2.5 новый engine по умолчанию улучшил дальность и скорость, распознавание повреждённых, очень маленьких и длинных кодов; Scandit edition была выведена из использования. Версия 2.6, которую мы тестировали, улучшила чтение при yaw/pitch — когда телефон смотрит на код не перпендикулярно — и обновила SDK до 1.6.2. Наш fixture с поворотом изображения на 32° проверяет roll в плоскости, но не заменяет отдельный физический тест yaw/pitch.

Для воспроизводимого сравнения устройств нельзя одновременно менять код, освещение, дистанцию, trigger и target application.

4. Keyboard output, Enter и Tab

В профиле раздел «Вывод нажатием клавиши» управляет тем, как Knox Capture передаёт символы. В нашем baseline значения Enter и Tab оставлены None, поэтому после ABC-1234 не отправлялся дополнительный управляющий символ.

Параметры keystroke output

Для реального workflow обычно выбирают один из вариантов:

  • suffix Enter — отправить форму или подтвердить товар;
  • suffix Tab — перейти к Quantity или следующему полю;
  • prefix/suffix — добавить служебную метку;
  • key event delay — замедлить отправку, если старое приложение теряет символы;
  • advanced rules — применять преобразования только к определённой symbology, длине или содержимому.

Важно: добавить Enter/Tab в basic formatting недостаточно. В keystroke output нужно также выбрать, передавать его как строку, key event или обоими способами.

5. Назначение кнопок запуска scanner

Путь: главная страница Knox Capture → меню с тремя точками → «Триггеры сканирования камерой».

Настройка trigger-кнопок

Кнопка на Samsung Keyboard

Если Samsung Keyboard выбрана клавиатурой по умолчанию, в её toolbar появляется иконка Knox Capture. Последовательность работы:

  1. открыть бизнес-приложение;
  2. поставить cursor в нужный EditText;
  3. нажать иконку Knox Capture в toolbar клавиатуры;
  4. навести камеру на код;
  5. дождаться звука и возврата в приложение.

Это был основной trigger в успешном тесте.

XCover key

На rugged-устройстве включён переключатель «Аппаратная клавиша», выбран XCover key. Это большая программируемая клавиша на левой стороне корпуса. По документации Samsung она является стандартным camera scan trigger на rugged Galaxy. Если системные настройки или EMM уже назначили этой клавише другую функцию, Knox Capture может не получить нажатие.

Для ручного теста нужно нажать физическую XCover key, когда target field имеет focus. ADB-команда input keyevent 1015 использовалась только для диагностики: она мгновенно отправляет key-down и key-up и не заменяет проверку физической кнопки.

Top key

На моделях с верхней аппаратной кнопкой Knox Capture может предложить Top key. Опция зависит от конкретного устройства и его key mapping. На данном экране XCover7 Pro был выбран именно XCover key.

Side key double press

На поддерживаемых моделях можно назначить двойное нажатие Side/Power key. Доступность пункта зависит от модели и системного назначения Side key.

Floating action button

Floating action button создаёт постоянную кнопку scanner поверх целевого приложения. Она удобна, если нет rugged-клавиш и не хочется открывать клавиатуру. В финальной конфигурации теста floating button выключена: основной сценарий проверял Samsung Keyboard и XCover key отдельно.

Смартфон без XCover/Top key: практический выбор

Galaxy A18 подтвердил, что специальная клавиша не требуется. Его ADB input map содержит только Power и Volume, а меню Knox Capture предлагает четыре рабочих пути: кнопку Samsung Keyboard, floating action button, двойное нажатие Side key и intent из бизнес-приложения.

Рекомендуемый порядок для обычного смартфона:

  1. Для быстрого внедрения — Samsung Keyboard: cursor уже стоит в поле.
  2. Для оператора в перчатках/киоска — floating button, если разрешён overlay.
  3. Для собственного приложения — явная кнопка «Сканировать» и soft-trigger intent.
  4. Side key double press — только после проверки, что системное назначение кнопки не конфликтует с камерой, SOS или политикой EMM.

Кнопка клавиатуры требует именно Samsung Keyboard по умолчанию. Если парк использует Gboard или закрывает клавиатуру, лучше floating button либо интеграция intent. На rugged XCover отдельная клавиша быстрее и предсказуемее в поточном режиме, но это эргономическое преимущество, а не другой decoder.

Во время отладки выяснилось, что focus терял не Knox Capture, а первоначальная версия нашего test app: после каждого события она вызывала ScrollView.fullScroll(View.FOCUS_DOWN). Этот вызов переносил focus из Barcode в журнал. Исправление — прокручивать без смены focus:

logScroll.post(() -> logScroll.smoothScrollTo(0, eventLog.getBottom()));

После исправления Barcode стабильно оставался focused, Samsung Keyboard не закрывалась, а результат wedge попадал в правильное поле.

6. Фактический QR-тест

Для теста создан QR с payload ABC-1234:

qrencode -o QR-ABC-1234.png -s 20 -m 4 'ABC-1234'

Перед попыткой запущен полный logcat:

tools/collect-device-info.sh first-qr-final
tools/start-log first-qr-final

Поле Barcode получило focus, после чего scanner был запущен кнопкой Knox Capture на Samsung Keyboard.

Поле Barcode перед сканированием

Scanner открыл заднюю камеру. На экране доступны flashlight, смена камеры и кнопка «Готово».

Камера Knox Capture

После наведения на QR scanner автоматически закрылся и ABC-1234 появился в Barcode.

Первый успешный результат подтвердил сам путь передачи данных через keyboard wedge:

Первое успешное сканирование ABC-1234

После исправления focus и повторного чистого прогона получен финальный результат:

Успешный результат ABC-1234

События, записанные приложением:

17:21:28.960  focus_gained  field=Barcode
17:21:29.795  key_down      keyCode=1102
17:21:31.781  text_changed  value=ABC-1234  outputLatencyMs=1985.299843

Важный практический вывод: строка пришла одним text_changed; приложение не должно рассчитывать, что каждый символ barcode обязательно появится как отдельный onKeyDown. Для получения итогового значения нужен TextWatcher или аналогичный listener изменения текста.

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

Бесплатный лимит после теста

Сравнение XCover7 Pro и Galaxy A18

Методика

Оба телефона использовали Knox Capture 2.6.00.0, один профиль, заднюю камеру, Automatic single scan и одно приложение Knox Wedge Test 1.0.1. Fixture выводился на одном мониторе. Перед trigger телефон уже был направлен на код — как пояснил оператор, он держал камеру в направлении кода и ждал. Поэтому результат — pre-aimed trigger-to-text, а не время поиска этикетки человеком.

В метрику входят запуск preview, экспозиция/автофокус, decoder и keyboard output. Температура, точное положение рук и фаза фокуса не были лабораторно зажаты, так что четыре повтора дают практический ориентир, но не сертификационный benchmark.

Этап XCover7 Pro Galaxy A18
Первый холодный чистый QR 2788.43 ms 2797.31 ms
Тёплые повторы 922.77; 893.00; 872.36; 869.05 ms 1103.42; 1153.13; 1112.63; 1112.18 ms
Среднее тёплых повторов 889.29 ms 1120.34 ms
Медиана тёплых повторов 882.68 ms 1112.40 ms

Холодный первый запуск практически совпал: около 2.8 s, то есть его определяет инициализация scanner/camera. После прогрева XCover имел медиану на 229.73 ms ниже; A18 был примерно на 26% медленнее относительно XCover. Это не означает, что любой XCover всегда быстрее любого A18, но в зафиксированной одинаковой сцене разница устойчива во всех четырёх тёплых повторах.

До скана Результат
A18 перед чистым тестом A18 результат
XCover перед сравнением XCover результат

Повреждённые и сложные коды

Все QR содержали ABC-1234 и были созданы с error correction H. Timeout — 6 s. Inverted recognition оставался выключен, поэтому провал инвертированного QR — ожидаемый результат настройки, а не поломка camera engine.

Fixture XCover7 Pro Galaxy A18 Итог
маленький QR, 28% canvas 923.28 ms 1584.45 ms оба прочитали
низкий контраст, 22% 918.36 ms 1256.85 ms оба прочитали
Gaussian blur 2.4 px 945.31 ms 1269.94 ms оба прочитали
пять белых диагональных царапин timeout timeout не прочитан
белое перекрытие центра 160×150 timeout timeout не прочитан
QR повёрнут в плоскости на 32° 892.32 ms 1169.00 ms оба прочитали
инвертированный QR timeout timeout ожидаемо при disabled inverted
чистый Code 128 1000.38 ms 2756.58 ms оба прочитали
Code 128 с gap/царапинами 972.22 ms 1839.61 ms оба прочитали
Общий success 6/9 6/9 одинаковая надёжность этой серии

Один damaged Code 128 оказался быстрее clean Code 128 на каждом телефоне. Это одиночный прогон с меняющимся фокусом, поэтому нельзя делать вывод, будто повреждение ускоряет decoder. Значимый вывод только бинарный: оба варианта были прочитаны. Для статистики каждого fixture нужно не менее 20 повторов со стойкой, фиксированной дистанцией и освещением.

Скриншоты каждого fixture на обоих телефонах

Условие XCover7 Pro Galaxy A18
маленький QR XCover small A18 small
низкий контраст XCover low contrast A18 low contrast
blur XCover blur A18 blur
царапины XCover scratched A18 scratched
перекрытый центр XCover occlusion A18 occlusion
roll 32° XCover roll A18 roll
inverted XCover inverted A18 inverted
Code 128 clean XCover Code128 A18 Code128
Code 128 damaged XCover damaged Code128 A18 damaged Code128

Аппаратный паспорт и влияние железа

Для обоих телефонов сняты CPU/GPU, RAM, накопитель, экран, все Camera2/HAL ID, датчики, батарея, радио, USB, audio, biometric и input devices. Полный паспорт доступен отдельным документом, а здесь — параметры, связанные со сканированием.

Параметр XCover7 Pro (SM-G766B) Galaxy A18 (SM-A185F)
SoC QTI SM7635 Samsung s5e8365
CPU 4×1.8048 + 3×2.4 + 1×2.496 ГГц 6×2.002 + 2×2.4 ГГц
GPU Adreno 810 Mali-G68
MemTotal 5.26 GiB 3.52 GiB
Экран 1080×2408, 120 Hz 1080×2340, 90 Hz
Основная Camera2 4080×3060 readout, max-resolution 8160×6120, sensor 5.2224×3.9168 mm, f/1.8, 3.86 mm, AF 10 D, flash 4080×3060, sensor 5.2224×3.9168 mm, f/1.8, 3.86 mm, AF 10 D, flash, OIS advertised
Широкоугольная 3264×2448, f/2.2, 1.64 mm, fixed focus 2576×1932, f/2.2, 1.40 mm, fixed focus
Клавиша отдельный KEY_MACRO17 / XCover key только Power/Volume

Основные камеры по публичным Camera2-параметрам близки, а XCover быстрее. Это наглядно показывает, почему «больше мегапикселей» недостаточно. На итог влияют:

  1. Оптика, свет и автофокус. Нерезкий или смазанный 1D-код decoder не спасёт; low light увеличивает выдержку и задержку.
  2. Сенсор и ISP. Размер читаемого кадра, шумоподавление, exposure/AF pipeline и Camera HAL определяют качество картинки, которую увидит Capture.
  3. SoC. CPU/DSP/GPU/NPU участвуют в запуске pipeline и обработке/декодировании.
  4. RAM. Влияет прежде всего на то, останутся ли Capture и бизнес-приложение в памяти. Она важнее для cold/warm launch, чем для самого одного decode.
  5. Накопитель. Почти не влияет на единичное распознавание; важен для старта, установки и записи больших логов/базы.
  6. Профиль. Чем больше symbology и сложных режимов разрешено, тем шире поиск. Оставляйте только используемые типы и проверяйте результат A/B-тестом.
  7. Эргономика trigger. Rugged key сокращает действия оператора, хотя engine остаётся тем же классом программного сканера.

Полный обезличенный паспорт: hardware-inventory.md. Численные результаты: metrics.json.

7. Как встроить Knox Capture в своё приложение

Есть четыре уровня интеграции. Для Phase 1 рекомендуется начинать с первого.

Вариант A — чистый keyboard wedge, без Knox SDK

Приложение остаётся обычным Android-приложением:

  • использует стандартные EditText;
  • не запрашивает Camera permission;
  • не содержит ZXing;
  • не содержит Knox Capture SDK;
  • не распознаёт barcode самостоятельно.

Администратор добавляет package/Activity приложения в профиль Knox Capture. После сканирования приложение видит обычное изменение текста.

Минимальный Kotlin-паттерн:

barcodeEditText.requestFocus()

barcodeEditText.doAfterTextChanged { editable ->
    val value = editable?.toString().orEmpty()
    // validate and update UI; do not assume per-character KeyEvents
}

barcodeEditText.setOnEditorActionListener { _, actionId, event ->
    val enter = actionId == EditorInfo.IME_ACTION_DONE ||
        event?.keyCode == KeyEvent.KEYCODE_ENTER
    if (enter) submitBarcode(barcodeEditText.text.toString())
    enter
}

Для формы Barcode → Quantity → Location удобно настроить Tab после Barcode или управлять переходом самим приложением после валидации. Не следует автоматически сохранять данные при каждом text_changed: Knox может передать строку целиком, пользователь тоже может редактировать её вручную.

Преимущества: минимальная разработка, нет camera code, легко работает с legacy forms и WebView. Недостаток: результат зависит от focus и настроек keyboard output.

Вариант B — soft trigger из интерфейса бизнес-приложения

Если нужна собственная кнопка «Scan», но результат всё ещё можно получать через wedge/настроенный output, приложение отправляет официальный broadcast в Knox Capture. Это не Capture SDK.

val intent = Intent().apply {
    action = "com.samsung.android.knox.intent.api.ACTION"
    putExtra("com.samsung.android.knox.intent.api.TRIGGER_ACTION", "START")
    setPackage("com.samsung.android.app.smartscan")
    putExtra("scanner_mode", "Single scan")
    putExtra("barcode_selection", "Automatic")
    putExtra("parse_gs1", false)

    val callback = PendingIntent.getActivity(
        this@MainActivity,
        0,
        Intent(this@MainActivity, MainActivity::class.java),
        PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
    )
    putExtra("pending_intent", callback)
}
sendBroadcast(intent)

На стороне Knox Capture нужно включить:

  1. Options → Camera scan triggers;
  2. Start scan from business app;
  3. target package в нужном профиле;
  4. соответствующий intent output, если он используется.

Knox Capture принимает soft trigger только от foreground-приложения. Обязательны явный package и PendingIntent, который используется для проверки отправителя.

Вариант C — intent output вместо keyboard wedge

Если бизнес-логике нужны symbology, raw bytes и scanner type, Knox Capture может отправлять результат через Android intent. Администратор настраивает package, action, category и delivery method; приложение объявляет соответствующую Activity, foreground service или BroadcastReceiver.

Основной extra:

com.samsung.smartscan.scanned_bundle_list

В bundle доступны, в частности:

com.samsung.smartscan.unprocessed_raw_data
com.samsung.smartscan.unprocessed_string_data
com.samsung.smartscan.symblogy_type
com.samsung.smartscan.scan_source
com.samsung.smartscan.scanner_type

Этот вариант удобнее wedge, когда нужно отличать QR от Code 128, хранить raw payload или принимать несколько результатов программно. Intent filter следует делать максимально узким, а входные extras — проверять перед обработкой.

Вариант D — Knox Capture SDK

SDK нужен, когда приложение должно самостоятельно владеть preview, получать callback с BarcodeResult, управлять scanner UI или реализовывать собственную нативную scan-логику. Это уже Phase 2: требуется отдельный .aar, SDK license и Camera permission в самом приложении. Для обычного warehouse/retail wedge-flow переходить к SDK до завершения Phase 1 преждевременно.

8. Автоматизированный сбор данных

Проект содержит Linux и Windows PowerShell варианты:

tools/collect-device-info.sh / .ps1
tools/start-capture-log.sh / .ps1
tools/stop-capture-log.sh / .ps1
tools/collect-failure-report.sh / .ps1
tools/parse-device-info.py
tools/compare-runs.py

Структура результатов:

results/<UTC-date>/<model>/<run-id>/

Для успешного прогона сохранены:

  • device-summary.json и device-summary.md;
  • полный capture-logcat.txt — 4723 строки;
  • filtered logcat — 1300 строк, raw файл не изменён;
  • session.json и session.csv;
  • скриншоты настройки и результата.

Сбор baseline не изменяет устройство. Очистка logcat выполняется только явным запуском start-log перед тестом.

9. Что тестировать дальше

  1. Повторить QR 10 раз и записать success/failure.
  2. Проверить Code 128, EAN-13, Data Matrix и PDF417.
  3. Отдельно проверить физическую XCover key и Top key.
  4. Сравнить Samsung Keyboard, floating button и hardware trigger.
  5. Настроить Enter, затем Tab, и проверить переход между полями.
  6. Проверить prefix/suffix и basic data formatting.
  7. Выполнить 20 попыток на дистанциях 10, 20, 30 и 50 см.
  8. Повторить неизменный сценарий на втором классе Samsung Galaxy.
  9. Экспортировать профиль и проверить импорт на другое устройство.
  10. Только после standalone baseline переходить к trial/commercial license, EMM managed configuration и Capture SDK.

Официальные материалы Samsung

Файлы публикации