엑셀, 웹 화면, 기존 업무 앱처럼 커서가 놓인 입력칸으로 데이터를 받는 프로그램이면 PDA의 키보드 입력(웨지) 방식을 그대로 사용합니다. 자체 개발 앱이 화면 포커스와 상관없이 스캔 결과와 바코드 종류를 함께 받아야 하면 인텐트 방식으로 바꿉니다.

제브라 TC22, 하니웰 EDA52, 포인트모바일 PM90 모두 기본 설치된 스캔 설정 앱에서 출력 항목 1개만 바꾸면 전환됩니다. 장비 교체 없이, 받는 앱이 지원하는 방식에 맞춥니다.

키보드 입력과 인텐트 방식 비교

항목키보드 입력(웨지)인텐트
전달 방법사람이 자판을 누른 것처럼 글자를 1자씩 입력안드로이드 인텐트 1개에 스캔 데이터를 담아 전달
받는 곳커서가 놓인 입력칸AndroidManifest.xml에 같은 액션 이름을 등록한 앱
앱 개발필요 없음수신 코드 개발 필요
바코드 종류 정보AIM ID 같은 접두어 설정을 켜야 입력제브라는 label_type 항목으로 전달
가공 전 원본 데이터키 입력으로 보낼 수 없음제브라는 decode_data 바이트 배열로 전달
엔터·탭접미어나 종료 문자 설정으로 추가스캔 1건을 인텐트 1개로 받아 불필요

키보드 입력은 앱 입장에서 사람이 친 글자와 구분되지 않습니다. 그래서 개발 없이 바로 연결되는 대신, 입력칸에 포커스가 없으면 13자리 상품 코드도 엉뚱한 칸에 들어가거나 사라집니다.

인텐트는 스캔 1건을 앱이 이벤트 1개로 받습니다. 어떤 입력칸이 선택돼 있든 앱이 데이터를 받고, label_type으로 EAN-13과 GS1-128을 구분해 필요 없는 코드를 걸러 냅니다.

제조사별 출력 방식 설정 메뉴

제조사설정 위치키보드 입력 항목인텐트 항목
제브라 (TC22 등)DataWedge 앱의 프로파일Keystroke outputIntent output
하니웰 (EDA52 등)설정 > Honeywell Settings > Scanning > 프로파일 > Data Processing SettingsWedge (처음 설정 켜짐)Data Intent (처음 설정 꺼짐)
포인트모바일 (PM90 등)ScanSettings > Wedge mode > Result typeKeyboard EventIntent Broadcast, Custom Intent

DataWedge는 모든 제브라 안드로이드 장비에 기본 설치돼 있습니다. 앱 1개에는 프로파일 1개만 연결되고, 프로파일이 없는 앱에는 Profile0이 적용됩니다. Profile0을 끄면 설정하지 않은 앱에서는 스캔이 되지 않습니다.

포인트모바일 PM90의 Result type에는 User Message와 Clipboard까지 5가지가 있습니다. 키보드 입력은 Keyboard Event를 선택하고, 종료 문자(Terminator)를 None·Space·Tab·LF·Tab & LF 5가지 중에서 정합니다.

키보드 입력 방식이 맞는 현장

웹 재고 화면, 엑셀 시트, 구입한 패키지 앱처럼 소스를 고칠 수 없는 프로그램은 키보드 입력을 선택하고, 스캔 뒤 다음 칸으로 넘어가야 하면 끝에 엔터(CR)나 탭 1자를 붙입니다.

제브라 TC22는 DataWedge Basic Data Formatting의 Send ENTER key·Send TAB key로 엔터나 탭을 붙입니다. 하니웰 EDA52는 Suffix에 \r(13), \n(10), \t(9)를 입력하면 해당 제어 문자로 바뀌고, 접미어 설정 전반은 스캐너 엔터 자동 입력 설정에 정리했습니다.

글자 누락과 순서 뒤바뀜

글자가 빠지거나 순서가 바뀌면 TC22 같은 제브라 장비는 Keystroke output의 글자 간 지연(Inter-character delay)을 늘립니다. 처음 설정은 0ms이고, 오류가 나면 100ms씩 올려 최대 1,000ms까지 설정합니다. 지연을 늘린 만큼 50자 데이터의 입력 시간도 길어집니다.

하니웰 EDA52는 Wedge Method를 Standard(처음 설정)와 Keyboard 2가지 중에서 고릅니다. Wedge as Keys 처음 설정은 9,10,13이라 탭·줄바꿈·캐리지 리턴 3개 문자만 키 이벤트로 보냅니다. 받는 앱이 엔터 키를 인식하지 못하면 이 목록에 13이 있는지 확인합니다.

인텐트 방식이 맞는 현장

자체 개발한 입출고·피킹 앱은 인텐트를 선택합니다. 사용자가 입력칸을 누르지 않아도 앱이 스캔 결과를 받고, 화면 전환 중 스캔한 송장 번호도 다른 칸에 섞이지 않습니다.

제브라 Intent output은 액션·카테고리 2개 항목이 앱의 AndroidManifest.xml 인텐트 필터와 맞아야 전달됩니다. 바코드 내용은 com.symbol.datawedge.data_string, 바코드 종류는 com.symbol.datawedge.label_type, 입력 장치는 com.symbol.datawedge.source 항목에 담깁니다.

제브라 전달 방식사용 API적용 조건
Start ActivitystartActivity()받는 화면을 singleTop으로 지정
Start ServicestartService()안드로이드 SDK 25 이하로 컴파일한 앱만 권장
Start Foreground ServicestartForegroundService()안드로이드 8.0 이상, SDK 30 이하로 컴파일한 앱만 권장
Broadcast intentsendBroadcast 방식부팅 직후 전달이 늦을 때만 FLAG_RECEIVER_FOREGROUND 추가

SDK 31 이상으로 개발하는 앱은 Start Activity나 Broadcast intent를 선택합니다. 다른 앱이 같은 액션 이름으로 데이터를 가로채지 않게 하려면 Component Information에 받는 앱의 패키지 이름과 서명 2가지를 지정합니다.

하니웰 Data Intent는 SDK나 라이브러리 없이 바코드 데이터를 받는 기능입니다. EDA52는 처음 설정이 꺼져 있으므로 업무 앱 전용 프로파일을 만들어 켭니다.

출력 방식 전환 순서

  1. 받는 앱이 입력칸으로 받는지, 인텐트 수신 코드가 있는지 앱 개발사에 확인하고 액션 이름을 받아 둡니다.
  2. Profile0 같은 공통 프로파일 대신 그 앱 전용 프로파일을 만들어 다른 앱의 입력 방식에 영향이 없게 합니다.
  3. 인텐트를 켠 프로파일은 키보드 입력을 꺼서 같은 데이터가 입력칸에 2번 들어가지 않게 합니다.
  4. GS1-128처럼 GS 구분 문자가 들어간 시험 바코드를 스캔해 마지막 자리까지 들어오는지 확인합니다. 구분 문자 처리는 GS1-128 물류 라벨 읽는 법에 있습니다.

장비 선택 기준은 산업용 PDA 고르는 법에, 한글이 섞인 QR 코드의 입력 문제는 바코드 스캐너 한글 깨짐 해결에 있습니다.