Quy tắc thực hiện
Hãy coi ScanManager như một tài nguyên phần cứng có chủ sở hữu rõ ràng. Mở nó, chọn chế độ đầu ra dự định, đăng ký bộ thu giải mã, xác thực mọi tải trọng, sau đó hủy đăng ký và đóng một cách xác định. Xác nhận hành vi của phương pháp trên mẫu mục đích sản xuất.
Chuẩn bị đường cơ sở SDK có thể tái tạo
Đóng gói cấu phần phần mềm SDK đã được phê duyệt thông qua quy trình tải xuống do nhà phát triển kiểm soát. Ghi lại phiên bản của nó và SHA-256 cùng với bản ghi thiết bị và bản dựng ứng dụng.
Giữ API của nhà cung cấp phía sau bộ điều hợp máy quét để logic nghiệp vụ có thể được kiểm tra đơn vị mà không cần phần cứng và có thể thay thế việc triển khai chụp khác.
- Chỉ nguồn SDK được phê duyệt
- Hàm băm tạo tác đã được ghi lại
- Đã xác định ranh giới bộ chuyển đổi
- Đã tạo ma trận thiết bị
Sở hữu vòng đời máy quét một lần
Tài liệu tham khảo API openScanner, closeScanner, startDecode, stopDecode và các chức năng chế độ đầu ra. Quyết định xem hoạt động, dịch vụ trên nền trước hay thành phần khác trong phạm vi ứng dụng có sở hữu các lệnh gọi đó hay không.
Tránh nhiều màn hình mở máy quét độc lập. Thực hiện dừng và đóng an toàn để lặp lại và hiển thị các giá trị trả về không thành công ở trạng thái chẩn đoán mà không cần ghi lại tải trọng mã vạch.
- Chủ sở hữu tài nguyên duy nhất
- Dọn dẹp bình thường
- Giá trị trả về được quan sát
- Không có tải trọng trong nhật ký thông thường
Xác thực tải trọng phát sóng
Một chương trình phát sóng giải mã thành công có thể bao gồm dữ liệu thô, chuỗi được giải mã, độ dài và loại mã vạch. Kiểm tra hành động, tính vô hiệu và độ dài trước khi phân phối sự kiện miền.
Chọn một đại diện có thẩm quyền. Nếu việc mã hóa có vấn đề, hãy giữ nguyên byte thô và giải mã theo bộ ký tự rõ ràng thay vì giả sử mọi mã vạch đều là ASCII đơn giản.
- Hành động khớp chính xác
- Độ dài phù hợp với tải trọng
- Chính sách mã hóa được ghi lại
- Bảo vệ sự kiện trùng lặp
Chuyển từ bản demo sang bằng chứng sản xuất
Biên dịch thành công chỉ chứng tỏ khả năng tương thích nguồn. Chạy ứng dụng trên từng kiểu máy, hệ điều hành và chương trình cơ sở dự kiến với các nhãn đại diện và các kịch bản vòng đời.
Ghi lại cài đặt máy quét và chế độ đầu ra sau khi cấu hình. Kiểm tra hồi quy sau khi thay đổi chính sách chương trình cơ sở, SDK, ứng dụng hoặc MDM.
- Quét đại diện
- Chu kỳ ngủ và tiếp tục
- Các trường hợp mã nhanh và dài
- Bản ghi kiểm tra đã được phiên bản
Bản đồ trạng thái vòng đời của ScanManager
Giữ các cuộc gọi tài nguyên được căn chỉnh với trạng thái ứng dụng có thể quan sát được.
| tiểu bang | Hành động bắt buộc | Phản hồi thất bại |
|---|---|---|
| Bắt đầu | Tạo ScanManager và mở máy quét | Chặn chụp và hiển thị trạng thái chẩn đoán |
| Sẵn sàng | Đặt chế độ đầu ra và đăng ký máy thu | Đọc lại hoặc báo cáo lỗi cấu hình |
| chụp | Bắt đầu giải mã hoặc chấp nhận các sự kiện kích hoạt | Hết thời gian, dừng và cho phép thử lại có kiểm soát |
| Đã tạm dừng | Dừng giải mã và hủy đăng ký như thiết kế | Ngăn chặn phân phối đến quy trình làm việc không hoạt động |
| bị phá hủy | Đóng máy quét một lần | Ghi lại kết quả dọn dẹp mà không có dữ liệu nhạy cảm |
Ví dụ về nhận biết vòng đời tối thiểu Kotlin
Xác minh các hằng số chế độ đầu ra, cờ nhận Android và quyền sở hữu vòng đời đối với SDK chính xác, API chính xác và kiến trúc ứng dụng.
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.
}
}Danh sách kiểm tra xác thực ScanManager
Đính kèm bản ghi này vào đường cơ sở của ứng dụng và thiết bị đã được phê duyệt.
- 01
Phiên bản SDK và SHA-256 đã được ghi lại
- 02
Thiết bị SKU, hệ điều hành và chương trình cơ sở đã được ghi lại
- 03
Máy quét mở và đóng liên tục
- 04
Đã đọc hoặc xác nhận chế độ đầu ra
- 05
Vòng đời của bộ thu khớp với giao diện người dùng đang hoạt động
- 06
Đã kiểm tra các phần bổ sung thô, chuỗi, độ dài và loại
- 07
Đã kiểm tra tất cả các ký hiệu cần thiết
- 08
Đã thử nghiệm quét lâu, bị hư hỏng và nhanh chóng
- 09
Đã kiểm tra chế độ ngủ, khởi động lại và MDM
- 10
Không có dữ liệu mã vạch nhạy cảm được ghi lại
Câu hỏi thường gặp
switchOutputMode(0) nghĩa là gì?
Tham chiếu API ghi lại việc chuyển đổi chế độ đầu ra, nhưng các hằng số và hành vi phải được kiểm tra trong bản phát hành SDK chính xác và chương trình cơ sở của thiết bị. Không sao chép hằng số mẫu vào sản xuất mà không xác minh.
Máy quét nên đóng onPause hay onStop?
Chọn quyền sở hữu vòng đời dựa trên kiến trúc ứng dụng và liệu quá trình quét có thể tiếp tục khi bị che khuất một phần hay không. Yêu cầu quan trọng là một chủ sở hữu, việc dọn dẹp mang tính quyết định và hành vi đã được kiểm tra.
Mẫu này có thể được sử dụng trên mọi thiết bị UROVO không?
Không. Đây là bản thiết kế xác thực dựa trên ScanManager v4.1.0326. Biên dịch và chạy nó trên từng kiểu máy, hệ điều hành và chương trình cơ sở dự định trước khi phát hành.
Bằng chứng và hạn chế
SDK mẫu dựa trên tham chiếu/không được xác thực trên mọi cấu hình mục tiêu
Mã này mang tính minh họa và cố tình gọi ra các hằng số dành riêng cho phiên bản và chính sách bộ thu Android để xác minh.
Đã đánh giá: 2026-08-10
- Tài liệu tham chiếu API ScanManager của UROVO Android SDK v4.1.0326
- UROVO Dự án mẫu ScanManager đang được xuất SDK đã được phê duyệt
- Android tài liệu về vòng đời của ứng dụng và bộ thu phát sóng

