시행규칙
ScanManager 를 명시적인 소유자가 있는 하드웨어 리소스로 취급합니다. 이를 열고 원하는 출력 모드를 선택하고 디코드 수신기를 등록하고 모든 페이로드의 유효성을 검사한 다음 결정적으로 등록을 취소하고 닫습니다. 생산 의도 샘플에서 분석법 동작을 확인합니다.
재현 가능한 SDK 기준선 준비
통제된 개발자 다운로드 프로세스를 통해 승인된 SDK 아티팩트를 패키징합니다. 애플리케이션 빌드 및 장치 기록과 함께 해당 버전과 SHA-256 을 기록합니다.
스캐너 어댑터 뒤에 공급업체 API를 유지하면 하드웨어 없이 비즈니스 논리를 단위 테스트할 수 있고 다른 캡처 구현을 대체할 수 있습니다.
- 승인된 SDK 소스만
- 아티팩트 해시가 기록되었습니다.
- 어댑터 경계가 정의됨
- 장치 매트릭스가 생성되었습니다.
스캐너 수명주기를 한 번 소유하십시오.
API 참조 문서는 openScanner, closeScanner, startDecode, stopDecode 및 출력 모드 함수입니다. 활동, 포그라운드 서비스 또는 다른 애플리케이션 범위 구성 요소가 해당 호출을 소유하는지 결정합니다.
여러 화면에서 스캐너를 독립적으로 열지 마십시오. 바코드 페이로드를 기록하지 않고 진단 상태에서 정지 및 닫기를 안전하게 반복하고 실패한 반환 값을 표시합니다.
- 단일 리소스 소유자
- 멱등성 정리
- 관찰된 반환 값
- 일반 로그에는 페이로드가 없습니다.
브로드캐스트 페이로드 검증
성공적인 디코딩 브로드캐스트에는 원시 데이터, 디코딩된 문자열, 길이 및 바코드 유형이 포함될 수 있습니다. 도메인 이벤트를 전달하기 전에 작업, null 허용 여부 및 길이를 확인하세요.
권위 있는 표현을 하나 선택하세요. 인코딩이 중요한 경우 모든 바코드가 단순한 ASCII라고 가정하는 대신 원시 바이트를 보존하고 명시적인 문자 세트로 디코딩하십시오.
- 작업이 정확히 일치함
- 페이로드와 일치하는 길이
- 인코딩 정책 문서화
- 중복된 이벤트 가드
데모에서 프로덕션 증거로 이동
컴파일 성공은 소스 호환성만을 증명합니다. 대표적인 레이블 및 수명주기 시나리오를 사용하여 각 의도된 모델, OS 및 펌웨어에서 애플리케이션을 실행합니다.
구성 후 스캐너 설정과 출력 모드를 기록합니다. 펌웨어, SDK, 애플리케이션 또는 MDM 정책 변경 후 회귀 테스트입니다.
- 대표 스캔 코퍼스
- 수면 및 재개 주기
- 신속하고 긴 코드 케이스
- 버전이 지정된 테스트 기록
ScanManager 수명주기 상태 맵
관찰 가능한 애플리케이션 상태에 맞게 리소스 호출을 유지합니다.
| 상태 | 필수 조치 | 실패 대응 |
|---|---|---|
| 시작 | ScanManager 생성 및 스캐너 열기 | 블록 캡처 및 진단 상태 표시 |
| 준비 | 출력 모드 설정 및 수신기 등록 | 다시 읽기 또는 구성 실패 보고 |
| 캡처 | 디코드 시작 또는 트리거 이벤트 수락 | 시간 초과, 중지 및 제어된 재시도 허용 |
| 일시중지됨 | 디코드를 중지하고 설계된 대로 등록을 취소합니다. | 비활성 워크플로로의 전달 방지 |
| 파괴됨 | 스캐너를 한 번 닫습니다 | 민감한 데이터 없이 정리 결과 기록 |
최소 수명 주기 인식 Kotlin 예시
정확한 SDK, 대상 API 및 애플리케이션 아키텍처에 대해 출력 모드 상수, Android 수신기 플래그 및 수명 주기 소유권을 확인합니다.
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.device.ScanManager
import androidx.appcompat.app.AppCompatActivity
class UrovoScannerActivity : AppCompatActivity() {
private val scanner = ScanManager()
private var receiverRegistered = false
private val decodeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != ScanManager.ACTION_DECODE) return
val raw = intent.getByteArrayExtra(ScanManager.DECODE_DATA_TAG) ?: return
val declaredLength = intent.getIntExtra(ScanManager.BARCODE_LENGTH_TAG, raw.size)
val type = intent.getByteExtra(ScanManager.BARCODE_TYPE_TAG, 0)
val value = intent.getStringExtra(ScanManager.BARCODE_STRING_TAG)
?: raw.copyOf(declaredLength.coerceIn(0, raw.size)).toString(Charsets.UTF_8)
onValidatedScan(value, type)
}
}
override fun onStart() {
super.onStart()
check(scanner.openScanner()) { "Scanner could not be opened" }
// Confirm the broadcast-output constant in the SDK version you ship.
check(scanner.switchOutputMode(0)) { "Output mode could not be set" }
registerReceiver(decodeReceiver, IntentFilter(ScanManager.ACTION_DECODE))
receiverRegistered = true
}
override fun onStop() {
scanner.stopDecode()
if (receiverRegistered) unregisterReceiver(decodeReceiver)
receiverRegistered = false
scanner.closeScanner()
super.onStop()
}
private fun onValidatedScan(value: String, type: Byte) {
// Route a sanitized domain event; do not log sensitive barcode values.
}
}ScanManager 검증 체크리스트
이 기록을 승인된 애플리케이션 및 장치 기준선에 첨부하십시오.
- 01
SDK 버전 및 SHA-256 이 기록되었습니다.
- 02
장치 SKU, OS 및 펌웨어가 기록되었습니다.
- 03
스캐너가 반복적으로 열리고 닫힙니다.
- 04
출력 모드 읽기 또는 확인
- 05
수신기 수명주기가 활성 UI와 일치합니다.
- 06
원시, 문자열, 길이 및 유형 추가 확인
- 07
모든 필수 기호가 테스트되었습니다.
- 08
길고 손상되었으며 빠른 스캔 테스트
- 09
절전, 재부팅 및 MDM 키오스크 모드 테스트됨
- 10
민감한 바코드 데이터가 기록되지 않음
자주 묻는 질문
switchOutputMode(0)는 무엇을 의미합니까?
API 는 출력 모드 전환을 참조하지만, 정확한 SDK 릴리스 및 장치 펌웨어에서 상수와 동작을 확인해야 합니다. 검증 없이 샘플 상수를 프로덕션에 복사하지 마십시오.
onPause 또는 onStop에서 스캐너를 닫아야 합니까?
애플리케이션 아키텍처와 부분적으로 가려졌을 때 스캔을 계속할 수 있는지 여부를 기반으로 수명 주기 소유권을 선택합니다. 중요한 요구 사항은 단일 소유자, 결정적 정리 및 테스트된 동작입니다.
이 샘플을 모든 UROVO 장치에서 사용할 수 있나요?
아니요. ScanManager v4.1.0326를 기반으로 한 검증 청사진입니다. 출시 전에 원하는 각 모델, OS 및 펌웨어에서 컴파일하고 실행하세요.
증거와 한계
SDK-참조 지원 샘플/모든 대상 구성에서 검증되지 않음
코드는 설명을 위한 것이며 확인을 위해 버전별 상수와 Android 수신자 정책을 의도적으로 호출합니다.
검토됨: 2026-08-10
- UROVO Android SDK v4.1.0326 ScanManager API 참조
- UROVO 승인된 SDK 내보내기의 ScanManager 샘플 프로젝트
- Android 애플리케이션 및 브로드캐스트 수신기 수명 주기 문서

