UROVO Android SDK/Kotlin

UROVO Exemple de ScanManager Kotlin et liste de contrôle de validation

Ce plan d'implémentation adapte le ScanManager UROVO approuvé API en un petit exemple d'activité Kotlin. Il s'agit d'un exemple de code à des fins de validation, et non d'une promesse de compatibilité avec chaque modèle ou firmware UROVO.

16 minutes de lectureRévisé: 2026-08-10Développeurs Android intégrant le matériel de codes-barres UROVO
Vue des fonctionnalités UROVO DT66 pour l'intégration de Android ScanManager
SDK-échantillon basé sur une référence/non validé sur chaque configuration cible

Points de départ vérifiés

API référenceUROVO Android SDK v4.1.0326

Utilisez le package approuvé et enregistrez la somme de contrôle de l'artefact.

Canal de décodageDiffusion ScanManager.ACTION_DECODE

Lisez les données documentées, les chaînes, la longueur et les extras de type.

Cycle de vieOuvrir et s'inscrire ; arrêter, désinscrire et fermer

Faites correspondre la propriété à l’architecture de l’application.

CompatibilitéAppareil exact + système d'exploitation + micrologiciel + SDK + version de l'application

La présence de API à elle seule ne constitue pas une validation réussie.

Règle de mise en œuvre

Traitez ScanManager comme une ressource matérielle avec un propriétaire explicite. Ouvrez-le, sélectionnez le mode de sortie souhaité, enregistrez le récepteur de décodage, validez chaque charge utile, puis désenregistrez-vous et fermez de manière déterministe. Confirmez le comportement de la méthode sur l’échantillon d’intention de production.

01

Préparer une référence reproductible de SDK

Packagez l'artefact SDK approuvé via le processus de téléchargement contrôlé par le développeur. Enregistrez sa version et SHA-256 aux côtés de la version de l'application et de l'enregistrement de l'appareil.

Conservez les API du fournisseur derrière un adaptateur de scanner afin que la logique métier puisse être testée unitairement sans matériel et qu'une autre implémentation de capture puisse être remplacée.

  • Source SDK approuvée uniquement
  • Hachage d'artefact enregistré
  • Limite de l'adaptateur définie
  • Matrice d'appareils créée
02

Posséder le cycle de vie du scanner une fois

Les documents de référence API openScanner, closeScanner, startDecode, stopDecode et les fonctions du mode de sortie. Décidez si l’activité, un service de premier plan ou un autre composant au niveau de l’application est propriétaire de ces appels.

Évitez que plusieurs écrans n’ouvrent le scanner indépendamment. Assurez l'arrêt et la fermeture en toute sécurité pour répéter et faire apparaître les valeurs de retour échouées dans l'état de diagnostic sans enregistrer les charges utiles des codes-barres.

  • Propriétaire de ressource unique
  • Nettoyage idempotent
  • Valeurs de retour observées
  • Aucune charge utile dans les journaux ordinaires
03

Valider la charge utile de diffusion

Une diffusion de décodage réussie peut inclure des données brutes, une chaîne décodée, une longueur et un type de code-barres. Vérifiez l'action, la nullité et la longueur avant de diffuser un événement de domaine.

Choisissez une représentation faisant autorité. Si l'encodage est important, conservez les octets bruts et décodez sous un jeu de caractères explicite au lieu de supposer que chaque code-barres est un simple ASCII.

  • L'action correspond exactement
  • Longueur conforme à la charge utile
  • Politique d'encodage documentée
  • Garde d'événements en double
04

Passer des preuves de démonstration aux preuves de production

Le succès de la compilation prouve uniquement la compatibilité des sources. Exécutez l'application sur chaque modèle, système d'exploitation et micrologiciel prévus avec des étiquettes représentatives et des scénarios de cycle de vie.

Enregistrez les paramètres du scanner et le mode de sortie après la configuration. Test de régression après des modifications du micrologiciel, de SDK, de l'application ou de la stratégie MDM.

  • Corpus d'analyse représentatif
  • Cycles de sommeil et de reprise
  • Cas de code rapide et long
  • Dossier de test versionné
Matrice de décision

Carte d'état du cycle de vie de ScanManager

Gardez les appels de ressources alignés sur l’état observable de l’application.

ÉtatAction requiseRéponse à l'échec
DémarrageCréez ScanManager et ouvrez le scannerBloquer la capture et afficher l'état du diagnostic
PrêtDéfinir le mode de sortie et enregistrer le récepteurRelisez ou signalez un échec de configuration
CapturerDémarrer le décodage ou accepter les événements déclencheursExpiration du délai, arrêt et autorisation d'une nouvelle tentative contrôlée
En pauseArrêtez le décodage et désinscrivez-vous comme prévuEmpêcher la livraison vers un workflow inactif
DétruitFermez le scanner une foisEnregistrer le résultat du nettoyage sans données sensibles
SDK

Exemple de Kotlin prenant en compte le cycle de vie minimal

Vérifiez les constantes du mode de sortie, les indicateurs du récepteur Android et la propriété du cycle de vie par rapport au SDK exact, à la cible API et à l'architecture de l'application.

UrovoScannerActivity.kt
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.
    }
}
Liste de contrôle du projet

Liste de contrôle de validation du ScanManager

Joignez cet enregistrement à l’application approuvée et à la référence de l’appareil.

  1. 01

    Version SDK et SHA-256 enregistrés

  2. 02

    Appareil SKU, système d'exploitation et micrologiciel enregistrés

  3. 03

    Le scanner s'ouvre et se ferme à plusieurs reprises

  4. 04

    Mode de sortie lu ou confirmé

  5. 05

    Le cycle de vie du récepteur correspond à l'interface utilisateur active

  6. 06

    Extras bruts, chaînes, longueur et type vérifiés

  7. 07

    Toutes les symbologies requises testées

  8. 08

    Analyses longues, endommagées et rapides testées

  9. 09

    Mode veille, redémarrage et mode kiosque MDM testés

  10. 10

    Aucune donnée de code-barres sensible enregistrée

FAQ

Questions fréquemment posées

Que signifie switchOutputMode(0) ?

La référence API documente la commutation du mode de sortie, mais les constantes et le comportement doivent être vérifiés dans la version exacte de SDK et dans le micrologiciel de l'appareil. Ne copiez pas la constante échantillon en production sans vérification.

Le scanner doit-il se fermer en onPause ou onStop ?

Choisissez la propriété du cycle de vie en fonction de l'architecture de l'application et de la possibilité de poursuivre l'analyse lorsqu'elle est partiellement masquée. L'exigence importante est un propriétaire unique, un nettoyage déterministe et un comportement testé.

Cet exemple peut-il être utilisé sur chaque appareil UROVO ?

Non. Il s'agit d'un plan de validation basé sur ScanManager v4.1.0326. Compilez-le et exécutez-le sur chaque modèle, système d'exploitation et firmware prévu avant sa sortie.

Preuves et limites

SDK-échantillon basé sur une référence/non validé sur chaque configuration cible

Le code est illustratif et appelle délibérément les constantes spécifiques à la version et la stratégie du récepteur Android pour vérification.

Révisé: 2026-08-10

Registre source
  • Référence de UROVO Android SDK v4.1.0326 ScanManager API
  • UROVO Exemple de projet ScanManager dans l'exportation SDK approuvée
  • Documentation sur le cycle de vie de l'application et du récepteur de diffusion Android

Transformez ce guide en décision de projet

Demander la validation de votre candidature

Partagez le modèle, le micrologiciel, la ligne de base SDK et le flux de travail de numérisation. RuggedLayer définira un plan de validation des appareils reproductible.

Demander la validation de votre candidature