Implementatie regel
Behandel ScanManager als een hardwarebron met een expliciete eigenaar. Open het, selecteer de beoogde uitvoermodus, registreer de decodeerontvanger, valideer elke payload, meld u vervolgens af en sluit deterministisch. Bevestig het gedrag van de methode op het productie-intentiemonster.
Bereid een reproduceerbare SDK basislijn voor
Verpak het goedgekeurde SDK-artefact via het gecontroleerde downloadproces voor ontwikkelaars. Registreer de versie en SHA-256 naast de applicatiebuild en het apparaatrecord.
Bewaar API's van leveranciers achter een scanneradapter, zodat de bedrijfslogica kan worden getest zonder hardware en een andere capture-implementatie kan worden vervangen.
- Alleen goedgekeurde bron SDK.
- Artefact-hash opgenomen
- Adaptergrens gedefinieerd
- Apparaatmatrix gemaakt
Bezit één keer de levenscyclus van de scanner
De API referentiedocumenten openenScanner, closeScanner, startDecode, stopDecode en uitvoermodusfuncties. Bepaal of de activiteit, een voorgrondservice of een ander applicatiegericht onderdeel eigenaar is van deze oproepen.
Voorkom dat meerdere schermen de scanner onafhankelijk openen. Maak stoppen en sluiten veilig om mislukte retourwaarden in de diagnostische status te herhalen en naar boven te halen zonder de payloads van streepjescodes te registreren.
- Eigenaar van één resource
- Idempotente schoonmaak
- Retourwaarden waargenomen
- Geen payloads in gewone logboeken
Valideer de uitgezonden payload
Een succesvolle decoderingsuitzending kan onbewerkte gegevens, een gedecodeerde reeks, lengte en streepjescodetype bevatten. Controleer actie, nullability en lengte voordat u een domeingebeurtenis levert.
Kies één gezaghebbende vertegenwoordiging. Als codering belangrijk is, bewaar dan onbewerkte bytes en decodeer onder een expliciete tekenset in plaats van aan te nemen dat elke streepjescode eenvoudig ASCII is.
- Actie komt precies overeen
- Lengte consistent met laadvermogen
- Coderingsbeleid gedocumenteerd
- Dubbele evenementenbewaker
Ga van demo naar productiebewijs
Succes bij het compileren bewijst alleen broncompatibiliteit. Voer de applicatie uit op elk beoogd model, besturingssysteem en firmware met representatieve labels en levenscyclusscenario's.
Registreer scannerinstellingen en de uitvoermodus na configuratie. Regressietest na wijzigingen in de firmware, SDK, applicatie of MDM beleid.
- Representatief scancorpus
- Slaap- en hervatcycli
- Snelle en lange codegevallen
- Versieversietestrecord
ScanManager levenscyclusstatuskaart
Houd resourceaanroepen afgestemd op de waarneembare applicatiestatus.
| Staat | Vereiste actie | Reactie op falen |
|---|---|---|
| Beginnen | Maak ScanManager en open scanner | Blokkeer opname en toon diagnostische status |
| Klaar | Stel de uitgangsmodus in en registreer de ontvanger | Lees de configuratiefout terug of rapporteer deze |
| Vastleggen | Start het decoderen of accepteer triggergebeurtenissen | Time-out, stop en gecontroleerde nieuwe poging toestaan |
| Gepauzeerd | Stop met decoderen en meld u af zoals ontworpen | Voorkom levering aan een inactieve workflow |
| Vernietigd | Sluit de scanner één keer | Registreer het opschoonresultaat zonder gevoelige gegevens |
Minimaal levenscyclusbewust Kotlin voorbeeld
Controleer de uitvoermodusconstanten, Android ontvangervlaggen en het eigendom van de levenscyclus aan de hand van de exacte SDK, doel API en applicatiearchitectuur.
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.
}
}Validatiechecklist voor ScanManager
Voeg dit record toe aan de goedgekeurde applicatie en de basislijn van het apparaat.
- 01
SDK versie en SHA-256 opgenomen
- 02
Apparaat SKU, besturingssysteem en firmware vastgelegd
- 03
Scanner wordt herhaaldelijk geopend en gesloten
- 04
Uitgangsmodus gelezen of bevestigd
- 05
De levenscyclus van de ontvanger komt overeen met de actieve gebruikersinterface
- 06
Raw-, string-, lengte- en type-extra's gecontroleerd
- 07
Alle vereiste symbologieën getest
- 08
Lange, beschadigde en snelle scans getest
- 09
Slaapstand, opnieuw opstarten en kioskmodus MDM getest
- 10
Geen gevoelige barcodegegevens geregistreerd
Veelgestelde vragen
Wat betekent switchOutputMode(0)?
De API-referentie documenteert het schakelen tussen uitvoermodi, maar constanten en gedrag moeten worden gecontroleerd in de exacte SDK-release en apparaatfirmware. Kopieer de monsterconstante niet zonder verificatie naar de productie.
Moet de scanner bij OnPause of OnStop sluiten?
Kies het eigendom van de levenscyclus op basis van de applicatiearchitectuur en of het scannen mag doorgaan als het gedeeltelijk verborgen is. De belangrijke vereiste is één eigenaar, deterministische opruiming en getest gedrag.
Kan dit voorbeeld op elk UROVO-apparaat worden gebruikt?
Nee. Het is een validatieblauwdruk gebaseerd op ScanManager v4.1.0326. Compileer en voer het uit op elk beoogd model, besturingssysteem en firmware voordat het wordt uitgebracht.
Bewijs en beperkingen
SDK-referentie-backed voorbeeld/niet gevalideerd voor elke doelconfiguratie
De code is illustratief en roept opzettelijk versiespecifieke constanten en Android ontvangerbeleid op ter verificatie.
Beoordeeld: 2026-08-10
- UROVO Android SDK v4.1.0326 ScanManager API referentie
- UROVO ScanManager -voorbeeldproject in goedgekeurde SDK-export
- Documentatie over de levenscyclus van Android -applicatie en uitzendingsontvanger

