実施ルール
ScanManager を、明示的な所有者を持つハードウェア リソースとして扱います。それを開き、目的の出力モードを選択し、デコード レシーバーを登録し、すべてのペイロードを検証してから、登録を解除して決定的に閉じます。実稼働向けサンプルでメソッドの動作を確認します。
再現可能な SDK ベースラインを準備します
管理された開発者ダウンロード プロセスを通じて、承認された SDK アーティファクトをパッケージ化します。アプリケーションのビルドとデバイスの記録とともに、そのバージョンと SHA-256 を記録します。
ベンダー API をスキャナー アダプターの背後に配置すると、ビジネス ロジックをハードウェアなしで単体テストでき、別のキャプチャ実装を置き換えることができます。
- 承認された SDK ソースのみ
- 記録されたアーティファクトのハッシュ
- アダプターの境界が定義されました
- デバイスマトリックスが作成されました
スキャナーのライフサイクルを一度所有する
API 参照ドキュメントは、openScanner、closeScanner、startDecode、stopDecode、および出力モード関数です。アクティビティ、フォアグラウンド サービス、または別のアプリケーション スコープのコンポーネントがそれらの呼び出しを所有するかどうかを決定します。
複数の画面でスキャナーを個別に開くことは避けてください。停止と終了を安全に繰り返し、バーコード ペイロードを記録せずに診断状態で失敗した戻り値を表示できるようにします。
- 単一のリソース所有者
- 冪等クリーンアップ
- 観察された戻り値
- 通常のログにはペイロードがありません
ブロードキャスト ペイロードを検証する
成功したデコード ブロードキャストには、生データ、デコードされた文字列、長さ、およびバーコード タイプが含まれる場合があります。ドメイン イベントを配信する前に、アクション、NULL 可能性、および長さを確認してください。
権威ある代表者を 1 つ選択してください。エンコードが重要な場合は、すべてのバーコードが単純な ASCII であると想定するのではなく、生のバイトを保存し、明示的な文字セットでデコードしてください。
- アクションが完全に一致
- 積載量に応じた長さ
- エンコーディングポリシーの文書化
- 重複イベントガード
デモから実稼働証拠への移行
コンパイルの成功は、ソースの互換性のみを証明します。代表的なラベルとライフサイクル シナリオを使用して、対象の各モデル、OS、ファームウェアでアプリケーションを実行します。
設定後にスキャナ設定と出力モードを記録します。ファームウェア、 SDK、アプリケーション、または MDM ポリシーの変更後の回帰テスト。
- 代表的なスキャンコーパス
- スリープと再開のサイクル
- 迅速なコードと長いコードのケース
- バージョン付きのテスト記録
ScanManager ライフサイクル状態マップ
リソース呼び出しを監視可能なアプリケーションの状態に合わせて維持します。
| 州 | 必要なアクション | 障害対応 |
|---|---|---|
| 開始 | ScanManager を作成してスキャナーを開く | キャプチャをブロックし、診断状態を表示する |
| 準備完了 | 出力モードの設定と受信機の登録 | 構成の失敗を読み返すかレポートする |
| 捕獲中 | デコードを開始するか、トリガーイベントを受け入れます | タイムアウト、停止、制御された再試行の許可 |
| 一時停止中 | デコードを停止し、設計どおりに登録を解除する | 非アクティブなワークフローへの配信を防止する |
| 破壊された | スキャナーを一度閉じます | 機密データを含まないクリーンアップ結果を記録する |
最小限のライフサイクルを意識した Kotlin の例
出力モード定数、 Android レシーバー フラグ、ライフサイクル所有権を、正確な SDK、ターゲット API 、およびアプリケーション アーキテクチャに対して検証します。
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 で閉じる必要がありますか?
アプリケーションのアーキテクチャと、部分的に隠されている場合でもスキャンを続行できるかどうかに基づいて、ライフサイクルの所有権を選択します。重要な要件は、所有者が 1 名であること、決定的なクリーンアップ、およびテストされた動作です。
このサンプルはすべての UROVO デバイスで使用できますか?
いいえ。これは、 ScanManager v4.1.0326 に基づく検証ブループリントです。リリース前に、対象となる各モデル、OS、ファームウェア上でコンパイルして実行します。
証拠と限界
SDK 参照に裏付けされたサンプル / すべてのターゲット構成で検証されていない
このコードは例示的なものであり、検証のためにバージョン固有の定数と Android レシーバー ポリシーを意図的に呼び出します。
レビュー済み: 2026-08-10
- UROVO Android SDK v4.1.0326 ScanManager API リファレンス
- 承認された SDK エクスポート内の UROVO ScanManager サンプル プロジェクト
- Android アプリケーションとブロードキャスト レシーバーのライフサイクル ドキュメント

