Zebra SE4710 Barcode Scanner SDK

Einleitung

Die nachfolgenden Informationen richten sich ausschließlich an Softwareentwickler, die ihre eigene Anwendung für das Scoria A104, Scoria A105 oder Scoria M240 mit Zebra SE4710 Scanner programmieren möchten. Es ermöglicht den Abruf der Scanergebnisse und das software-basierte Auslösen des Scanbuttons. 

Bei Fragen oder Verbesserungsvorschlägen senden Sie bitte eine E-Mail an [email protected] 

Tools und Umgebung

  • Android 9+
  • Android Studio 3.x
  • JDK 1.8

Grundsätze für die Umsetzung

  1. MVC Modus,
  2. rxjava2+retrofit2 Netzwerk-Anfrage-Framework.
  3. easypermissions Erlaubnisanfrage
  4. greenDAO-Datenbank
  5. Serielle Kommunikation

Hauptprozess

Die Scan-App verfügt über unterschiedliche Schaltflächen und Scan-Hardware-Modelle für verschiedene Geräte, so dass wir eine Menge verschiedener Informationen konfigurieren müssen, um die App an das Gerät anzupassen. Wir legen eine konfigurierbare Datei mit dem Namen scanner_config.xml unter vendor/etc/ auf der Framework-Schicht ab. Wenn die App zum ersten Mal geöffnet wird, lesen wir die xml-Konfigurationsdatei, um die Grundkonfiguration der Scan-App zu erhalten. Die Datei sieht in etwa wie folgt aus:


Initialisierung des Scanengine

Scanner.init(readerId, context, callback); 
oder 
Scanner.init(readerId, context);

ReaderId ist die Kamera-ID, die sich auf das Element ReaderID in der vom Gerät vorgegebenen Datei scanner_config.xml beziehen kann (der Dateipfad lautet vendor/etc/scanner_config.xml); der Parameter context kann an den Anwendungskontext übergeben werden.

Der callback-Parameter ist optional und kann den Start (onStart) und das Ende (onFinish) des Initialisierungsprozesses überwachen.

Callback für Scancode einstellen

Scanner.setDecodeCallback(decodeCallback);

Im Parameter decodeCallback sind die von onComplete übergebenen Parameterdaten die Originaldaten, die nach dem Scannen des Codes zurückgegeben werden.

Scanvorgang starten

Scanner.startDecode(callback); oder Scanner. startDecode();

Der Callback-Parameter ist optional und kann den Beginn (onStart) und das Ende (onFinish) des Code-Scanvorgangs überwachen.

Stoppen des Scannens

Unter normalen Umständen wird das Scannen angehalten, wenn die Dekodierung abgeschlossen ist oder die Zeitüberschreitung erreicht ist. Wenn Sie das Scannen manuell beenden müssen, können Sie Scanner.stopDecode() aufrufen;

Scanergebnis erhalten

Grundsätzlich werden die Datenübertragung und die Tastenüberwachung beim hartdekodierten Scannen durch Broadcasting realisiert, das in der App eine wichtige Rolle spielt. Wenn der Dienst eingeschaltet ist, überwachen wir die Übertragung aller Tastenanschläge. Code:

Der überwachte Broadcast wird einheitlich angenommen und verarbeitet, einschließlich der Tastenanschläge und einiger Initialisierungsoperationen. Der Code lautet wie folgt:

Wenn wir den Tasten Broadcast abfragen, antworten wir auf ihn. Das Gerät hat die Funktion, den Tasten Broadcast auszulösen.  Das Drücken der Taste triggert den "Down Broadcast" und das loslösen sendet den "Up Broadcast". Wenn die Scantaste gedrückt ist und der "Down Broacast" getriggert wird, startet der Methode die das Öffnen des Scankopfs aufruft.

Der Grund für den ersten Abbruch liegt darin, dass er sich vor der Auslösung garantiert in einem nicht ausgelösten Zustand befindet.


!!!Release the dock-sweeping resources

Scanner.release();


Andere Funktionen

Verfügbarkeit prüfen

Scanner.isAvailable(); gibt true zurück, wenn er verfügbar ist, und muss init zur Initialisierung aufrufen, wenn er nicht verfügbar ist.

Parameter einstellen

Scanner.setParameter(param, value);

Setzen Sie den Wert des Parameters param auf value. Die genaue Liste der einstellbaren Parameter und der optionalen Werte finden Sie in der Entwicklungsdokumentation des Moduls, welche hier heruntergeladen werden kann: https://support.werocktools.com/download/manuals/Zebra_4710_SWDecodeAndroid_IG(Software_decode).pdf

Parameter aufrufen

Scanner.getNumParameter(param);

Scanner.getStrParameter(param);

Scanner.getNumProperty(param);

Scanner.getStrProperty(param);

Zurücksetzen der Parameter

Scanner.setDefaultParameters(); setzt die Parameterkonfiguration des Scanners auf den Werkszustand zurück.


Anpassen der Broadcast Adresse

Sollten Sie eine spezifische Broadcast-Adresse für Ihre Anwendung benötigen, dann gehen Sie wie folgt vor:

Um den die Broadcast Adresse zu ändern, gehen Sie wie folgt vor:

  1. Tippen Sie in der Scanner Configuration-App oben rechts auf das Zahnrad Symbol
  2. Tippen Sie anschließend auf „General Settings“
  3. Tippen Sie nun auf „Config data brodacst”, ändern Sie die Werte und bestätigen Sie die Eingabe mit „OK“

 

Beispiele für die Verwendung

Referenzbibliothek

Fügen Sie common.aar und lib4710.aar zu Ihrem Projekt hinzu.

Fügen Sie in der Datei build.gradle android folgendes Repository hinzu:

    repositories {
        flatDir {
            Verzeichnisse 'libs'
        }
    }

Fügen Sie die Abhängigkeiten hinzu
    implementation(name: 'common', ext: 'aar')
    implementation(name: 'lib4710', ext: 'aar')

!!Berechtigungen hinzufügen

Fügen Sie android:sharedUserId="android.uid.system" in die AndroidManifest.xml-Datei hinzu.

Hinweis: Nachdem Sie die System-Uid hinzugefügt haben, müssen Sie die Systemsignatur verwenden (Sie können sich an den Entwickler wenden, um sie zu erhalten), bevor sie normal verwendet werden kann.

Initialisierung

Nach dem Aufruf von init zur Initialisierung setzen Sie den Callback für den Abschluss des Scancodes

    // Initialize the sweep port
    Scanner.init(2, mContext);
    // Set the scan code completion callback (requires after initialization)
    Scanner.setDecodeCallback(new DecodeCallback() {
        @Override
        public void onComplete(byte[] data) {
            // data is the original data obtained by scanning the code
            // Process scan results here
        }
    });

Überwachung der Scancode-Tasten

Standardmäßig lösen alle physischen Scan-Tasten immer eine der folgenden drei Gruppen von Übertragungen aus, nachdem sie gedrückt/aufgeschlagen wurden:

static final String ACTION_KEYEVENT_SCAN_F_DOWN = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_F_DOWN";       // Scan code F key DOWN broadcast
static final String ACTION_KEYEVENT_SCAN_F_UP = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_F_UP";           // Scan code F key UP broadcast
static final String ACTION_KEYEVENT_SCAN_L_DOWN = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_L_DOWN";       // Scan code L key DOWN broadcast
static final String ACTION_KEYEVENT_SCAN_L_UP = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_L_UP";           // Scan code L key UP broadcast
static final String ACTION_KEYEVENT_SCAN_R_DOWN = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_R_DOWN";       // Scan code R key DOWN broadcast
static final String ACTION_KEYEVENT_SCAN_R_UP = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_R_UP";           // Scan code R key UP broadcast


Sie können diese drei Broadcastgruppen überwachen von Übertragungen überwachen, mit dem Scannen des Codes beginnen, wenn die Übertragung nach unten ausgelöst wird, und das Scannen des Codes beenden, wenn die Übertragung nach oben ausgelöst wird.

Sie können diese drei Broadcast-Gruppen überwachen um festzustellen, wenn eine der Tasten gedrückt wurde um dann den Scanprozess zu starten.

    // Scan code button broadcast response
    BroadcastReceiver triggerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (intent.getAction()) {
                case ACTION_KEYEVENT_SCAN_F_DOWN:
                case ACTION_KEYEVENT_SCAN_L_DOWN:
                case ACTION_KEYEVENT_SCAN_R_DOWN:
                    // Press to start scanning
                    Scanner.startDecode();
                    break;
                case ACTION_KEYEVENT_SCAN_F_UP:
                case ACTION_KEYEVENT_SCAN_L_UP:
                case ACTION_KEYEVENT_SCAN_R_UP:
                default:
                    // Pop up to stop scanning
                    Scanner.stopDecode();
                    break;
            }
        }
    };

Wenn Sie den Tastendruck nicht überwachen müssen können Sie mit Scanner.startDecode() und Scanner.stopDecode() die Funktion direkt aufrufen.

Hinweis: Wenn Sie den Scanprozess kontinuierlich auslösen müssen sollte das Intervall zwischen dem letzten Abschluss und dem nächsten Start mehr als 100 ms betragen, da sonst der Prozess stecken bleiben kann.

Scan-Taste simulieren, um den Scanvorgang auszulösen

Sie können den Druck eines Scanbuttons simulieren: 

public static final String ACTION_KEYEVENT_SCAN_F_UP = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_F_UP";

public static final String ACTION_KEYEVENT_SCAN_F_DOWN = "com.android.action.keyevent.KEYCODE_KEYCODE_SCAN_F_DOWN";


Scanergebnis erhalten

com.android.serial.BARCODEPORT_RECEIVEDDATA_ACTION ist der Broadcast der bedeutet, dass der Scan erfolgreich war. Nachdem Sie diese Übertragung erhalten haben, müssen Sie nur noch 'DATA' von Intent abrufen, dann können Sie die Scan-Daten erhalten. Der Datentyp ist ein String.

public static final String BARCODEPORT_RECEIVEDDATA_ACTION = "com.android.serial.BARCODEPORT_RECEIVEDDATA_ACTION";

public static final String BARCODEPORT_RECEIVEDDATA_EXTRA_DATA = "DATA";



Status des Scanners ändern

static final String ACTION_CHANGE_STATE_ENABLE = "com.zebra.action.CHANGE_STATE_ENABLE";

static final String ACTION_CHANGE_STATE_DISABLE = "com.zebra.action.CHANGE_STATE_DISABLE";

Ressourcen freigeben

Wenn Sie das Programm vollständig beenden, rufen Sie Scanner.release() auf, um den Scanport und Ressourcen freizugeben.


Ein- und Ausschalten des Geräts und Auslösen der Abschaltung

Das Gerät löst den Scanvorgang aus, indem es über die App Anweisungen an die Framework-Ebene sendet. Sie müssen den Betrieb einschalten, bevor Sie den Scan verwenden. Der Befehlscode lautet wie folgt:

Power on Operation

Der Trigger-Scanvorgang kann nach dem Einschalten realisiert werden, der Code zum Auslösen und Schließen des Scankopfes:





Versionsinformationen


Version

Datum

Notizen

1.0


Initiale Veröffentlichung

1.1

04.08.2022

Komplette inhaltliche Überarbeitung und Vereinheitlichung