Umsetzungsregel
Behandeln Sie ScanManager als Hardwareressource mit einem expliziten Besitzer. Öffnen Sie es, wählen Sie den gewünschten Ausgabemodus aus, registrieren Sie den Decodierungsempfänger, validieren Sie jede Nutzlast, heben Sie dann die Registrierung auf und schließen Sie es deterministisch. Bestätigen Sie das Verhalten der Methode anhand der Produktionsabsichtsprobe.
Bereiten Sie eine reproduzierbare SDK-Basislinie vor
Verpacken Sie das genehmigte SDK-Artefakt über den kontrollierten Entwickler-Download-Prozess. Notieren Sie die Version und SHA-256 zusammen mit dem Anwendungs-Build und dem Gerätedatensatz.
Halten Sie Anbieter-APIs hinter einem Scanner-Adapter, damit die Geschäftslogik ohne Hardware getestet und durch eine andere Erfassungsimplementierung ersetzt werden kann.
- Nur genehmigte SDK-Quelle
- Artefakt-Hash aufgezeichnet
- Adaptergrenze definiert
- Gerätematrix erstellt
Besitzen Sie einmal den Lebenszyklus des Scanners
Die Referenzdokumente API sind die Funktionen openScanner, closeScanner, startDecode, stopDecode und Ausgabemodus. Entscheiden Sie, ob die Aktivität, ein Vordergrunddienst oder eine andere anwendungsbezogene Komponente Eigentümer dieser Aufrufe ist.
Vermeiden Sie, dass mehrere Bildschirme den Scanner unabhängig voneinander öffnen. Machen Sie das Stoppen und Schließen wiederholsicher und zeigen Sie fehlgeschlagene Rückgabewerte im Diagnosestatus an, ohne Barcode-Nutzlasten zu protokollieren.
- Einzelner Ressourceneigentümer
- Idempotente Bereinigung
- Rückgabewerte beobachtet
- Keine Nutzlasten in gewöhnlichen Protokollen
Validieren Sie die Broadcast-Nutzlast
Eine erfolgreiche Decodierungssendung kann Rohdaten, eine decodierte Zeichenfolge, Länge und Barcodetyp umfassen. Überprüfen Sie Aktion, NULL-Zulässigkeit und Länge, bevor Sie ein Domänenereignis übermitteln.
Wählen Sie eine maßgebliche Darstellung. Wenn es auf die Kodierung ankommt, behalten Sie die Rohbytes bei und dekodieren Sie sie unter einem expliziten Zeichensatz, anstatt davon auszugehen, dass es sich bei jedem Barcode um einfaches ASCII handelt.
- Aktion stimmt genau überein
- Länge passend zur Nutzlast
- Kodierungsrichtlinie dokumentiert
- Doppelter Ereigniswächter
Gehen Sie vom Demo- zum Produktionsbeweis über
Der Kompilierungserfolg beweist nur die Quellkompatibilität. Führen Sie die Anwendung auf jedem vorgesehenen Modell, Betriebssystem und jeder Firmware mit repräsentativen Bezeichnungen und Lebenszyklusszenarien aus.
Zeichnen Sie die Scannereinstellungen und den Ausgabemodus nach der Konfiguration auf. Regressionstest nach Firmware-, SDK-, Anwendungs- oder MDM-Richtlinienänderungen.
- Repräsentativer Scan-Korpus
- Schlaf- und Wiederaufnahmezyklen
- Schnelle und lange Codefälle
- Versionierter Testdatensatz
ScanManager -Lebenszyklusstatuskarte
Halten Sie Ressourcenaufrufe auf den beobachtbaren Anwendungsstatus ausgerichtet.
| Staat | Erforderliche Aktion | Fehlerreaktion |
|---|---|---|
| Beginnt | Erstellen Sie ScanManager und öffnen Sie den Scanner | Erfassung blockieren und Diagnosestatus anzeigen |
| Bereit | Ausgabemodus einstellen und Empfänger registrieren | Lesen Sie den Konfigurationsfehler zurück oder melden Sie ihn |
| Erfassen | Starten Sie die Dekodierung oder akzeptieren Sie Triggerereignisse | Zeitüberschreitung, Stopp und kontrollierte Wiederholung ermöglichen |
| Angehalten | Stoppen Sie die Dekodierung und heben Sie die Registrierung wie vorgesehen auf | Verhindern Sie die Übermittlung an einen inaktiven Workflow |
| Zerstört | Schließen Sie den Scanner einmal | Bereinigungsergebnis ohne sensible Daten aufzeichnen |
Minimales lebenszyklusbewusstes Kotlin -Beispiel
Überprüfen Sie die Ausgabemoduskonstanten, Android -Empfängerflags und den Lebenszyklusbesitz anhand der genauen SDK-, Ziel- API-und Anwendungsarchitektur.
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 -Validierungscheckliste
Hängen Sie diesen Datensatz an den genehmigten Antrag und die Gerätebaseline an.
- 01
SDK Version und SHA-256 aufgezeichnet
- 02
Gerät SKU, Betriebssystem und Firmware aufgezeichnet
- 03
Der Scanner öffnet und schließt sich wiederholt
- 04
Ausgabemodus gelesen oder bestätigt
- 05
Der Lebenszyklus des Empfängers entspricht der aktiven Benutzeroberfläche
- 06
Raw-, String-, Längen- und Typ-Extras überprüft
- 07
Alle erforderlichen Symbologien getestet
- 08
Lange, beschädigte und schnelle Scans getestet
- 09
Ruhezustand, Neustart und MDM Kioskmodus getestet
- 10
Es werden keine sensiblen Barcode-Daten protokolliert
Häufig gestellte Fragen
Was bedeutet switchOutputMode(0)?
Die API-Referenz dokumentiert den Wechsel des Ausgabemodus, aber Konstanten und Verhalten müssen in der genauen SDK-Version und Geräte-Firmware überprüft werden. Kopieren Sie die Beispielkonstante nicht ohne Überprüfung in die Produktion.
Soll der Scanner im OnPause- oder OnStop-Modus schließen?
Wählen Sie die Lebenszykluseigentümerschaft basierend auf der Anwendungsarchitektur und der Frage, ob das Scannen fortgesetzt werden darf, wenn es teilweise verdeckt ist. Die wichtige Voraussetzung ist ein Eigentümer, deterministische Bereinigung und getestetes Verhalten.
Kann dieses Beispiel auf jedem UROVO Gerät verwendet werden?
Nein. Es handelt sich um einen Validierungsentwurf basierend auf ScanManager v4.1.0326. Kompilieren Sie es und führen Sie es vor der Veröffentlichung auf jedem gewünschten Modell, Betriebssystem und jeder Firmware aus.
Beweise und Einschränkungen
SDK-referenzgestütztes Beispiel/nicht auf jeder Zielkonfiguration validiert
Der Code dient der Veranschaulichung und ruft bewusst versionenspezifische Konstanten und die Empfängerrichtlinie Android zur Überprüfung auf.
Bewertet: 2026-08-10
- UROVO Android SDK v4.1.0326 ScanManager API Referenz
- UROVO ScanManager -Beispielprojekt im genehmigten SDK-Export
- Android Lebenszyklusdokumentation für Anwendungen und Rundfunkempfänger

