Regola di attuazione
Tratta ScanManager come una risorsa hardware con un proprietario esplicito. Aprilo, seleziona la modalità di output prevista, registra il ricevitore di decodificazione, convalida ogni carico utile, quindi annulla la registrazione e chiudi in modo deterministico. Confermare il comportamento del metodo sul campione con intento di produzione.
Preparare una linea di base SDK riproducibile
Crea il pacchetto dell'artefatto SDK approvato attraverso il processo di download controllato dallo sviluppatore. Registra la sua versione e SHA-256 insieme alla build dell'applicazione e al record del dispositivo.
Mantieni le API del fornitore dietro un adattatore per scanner in modo che la logica aziendale possa essere testata unitariamente senza hardware e sia possibile sostituire un'altra implementazione di acquisizione.
- Solo sorgente SDK approvata
- Hash degli artefatti registrato
- Confine dell'adattatore definito
- Matrice del dispositivo creata
Gestisci il ciclo di vita dello scanner una volta
I documenti di riferimento API openScanner, closeScanner, startDecode, stopDecode e le funzioni della modalità di output. Decidi se tali chiamate sono di proprietà dell'attività, di un servizio in primo piano o di un altro componente con ambito applicativo.
Evitare che più schermi aprano lo scanner in modo indipendente. Rendi sicuro l'arresto e la chiusura per ripetere e far emergere i valori restituiti non riusciti in stato diagnostico senza registrare i payload dei codici a barre.
- Proprietario unico della risorsa
- Pulizia idempotente
- Valori restituiti osservati
- Nessun carico utile nei registri ordinari
Convalidare il payload della trasmissione
Una trasmissione di decodifica riuscita può includere dati grezzi, una stringa decodificata, lunghezza e tipo di codice a barre. Controlla l'azione, l'idoneità ai valori nulla e la lunghezza prima di consegnare un evento del dominio.
Scegli una rappresentazione autorevole. Se la codifica è importante, preserva i byte grezzi e decodifica con un set di caratteri esplicito invece di presumere che ogni codice a barre sia un semplice ASCII.
- L'azione corrisponde esattamente
- Lunghezza compatibile con il carico utile
- Politica di codifica documentata
- Protezione eventi duplicata
Passare dalla dimostrazione alla prova di produzione
Il successo della compilazione dimostra solo la compatibilità del codice sorgente. Esegui l'applicazione su ciascun modello, sistema operativo e firmware previsto con etichette rappresentative e scenari del ciclo di vita.
Registrare le impostazioni dello scanner e la modalità di output dopo la configurazione. Test di regressione dopo modifiche del firmware, SDK, dell'applicazione o della policy MDM.
- Corpus di scansione rappresentativo
- Dormire e riprendere i cicli
- Casi rapidi e con codice lungo
- Record di test con versione
Mappa dello stato del ciclo di vita di ScanManager
Mantieni le chiamate alle risorse allineate allo stato osservabile dell'applicazione.
| Stato | Azione richiesta | Risposta al fallimento |
|---|---|---|
| Inizio | Crea ScanManager e apri lo scanner | Blocca l'acquisizione e mostra lo stato diagnostico |
| Pronto | Imposta la modalità di uscita e registra il ricevitore | Rileggere o segnalare un errore di configurazione |
| Catturare | Avvia la decodifica o accetta eventi di attivazione | Timeout, interruzione e consenti tentativi controllati |
| In pausa | Interrompi la decodifica e annulla la registrazione come previsto | Impedisci la consegna a un flusso di lavoro inattivo |
| Distrutto | Chiudere lo scanner una volta | Registra il risultato della pulizia senza dati sensibili |
Esempio Kotlin minimo con riconoscimento del ciclo di vita
Verifica le costanti della modalità di output, i flag del ricevitore Android e la proprietà del ciclo di vita rispetto all'esatto SDK, al target API e all'architettura dell'applicazione.
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.
}
}Elenco di controllo di convalida di ScanManager
Allega questo record all'applicazione approvata e alla baseline del dispositivo.
- 01
Versione SDK e SHA-256 registrati
- 02
Dispositivo SKU, sistema operativo e firmware registrati
- 03
Lo scanner si apre e si chiude ripetutamente
- 04
Modalità di uscita letta o confermata
- 05
Il ciclo di vita del ricevitore corrisponde all'interfaccia utente attiva
- 06
Raw, stringa, lunghezza e tipo extra controllati
- 07
Tutte le simbologie richieste sono state testate
- 08
Scansioni lunghe, danneggiate e rapide testate
- 09
Testata la modalità sospensione, riavvio e MDM kiosk
- 10
Nessun dato sensibile del codice a barre registrato
Domande frequenti
Cosa significa switchOutputMode(0)?
Il riferimento API documenta il cambio della modalità di output, ma le costanti e il comportamento devono essere controllati nell'esatto rilascio SDK e nel firmware del dispositivo. Non copiare la costante del campione nella produzione senza verifica.
Lo scanner deve chiudersi in onPause o onStop?
Scegli la proprietà del ciclo di vita in base all'architettura dell'applicazione e se la scansione può continuare anche quando parzialmente oscurata. Il requisito importante è un proprietario, una pulizia deterministica e un comportamento testato.
Questo campione può essere utilizzato su ogni dispositivo UROVO ?
No. È un progetto di convalida basato su ScanManager v4.1.0326. Compilalo ed eseguilo su ciascun modello, sistema operativo e firmware previsto prima del rilascio.
Prove e limiti
SDK-campione supportato da riferimenti/non convalidato su ogni configurazione di destinazione
Il codice è illustrativo e richiama deliberatamente le costanti specifiche della versione e la policy del ricevitore Android per la verifica.
Recensito: 2026-08-10
- UROVO Android SDK v4.1.0326 Riferimento ScanManager API
- UROVO Progetto di esempio ScanManager nell'esportazione SDK approvata
- Documentazione sul ciclo di vita dell'applicazione Android e del ricevitore di trasmissione

