1. Die Wahl der Austauschmethode. API-Beschreibung.2. Implementierung der API auf der Seite von 1C.3. BroadcastReceiver. Wir bekommen die Daten4. OnKeyUp. Barcode-Scanner mit Tastaturemulation
Dieser Artikel sollte der kürzeste sein. Aber der Teufel steckt im Detail. Hier sind einige Fakten.
Fakt 1. Wenn das Formular mehrere
EditText
Felder enthält und wir
OnKeyListener
für alles neu
OnKeyListener
, sind onKeyUp und onKeyDown schattiert und werden nicht mehr aufgerufen. Code
class MainActivity : AppCompatActivity() { var keyListener: View.OnKeyListener = View.OnKeyListener { _, _, _ -> true} override fun onCreate(savedInstanceState: Bundle?) { val editBarcode = findViewById(R.id.editBarcode) editBarcode.setOnKeyListener (keyListener) val editQuantity: EditText = findViewById(R.id.editQuantity) editQuantity.setOnKeyListener(keyListener)
Es folgt
Fakt 2. onKeyUp
und
onKeyDown
funktionieren nur für die Felder, für die OnKeyListener nicht neu definiert wurde. Und nur in diesem Bereich.
Fakt 3. ATOL Lite.Droid in Version 1.1.1 übergibt KeyEvent = KEYCODE_TAB nicht, wenn es als Präfix festgelegt ist. Weder in Präfix1 noch in Präfix2. Ich habe es nicht im Suffix versucht. Er wird dort nicht gebraucht.
Fakt 4. onKeyUp, onKeyDown, setOnKeyListener - warten Sie nur auf Hardware-Klicks. Eine Tastatur, ein Scanner mit Tastaturemulation und seltsamerweise ist die Zurück-Taste auf dem Bildschirm auch eine Hardware-Taste (KEYCODE_BACK). Und die digitalen Tasten (physisch) auf dem TSD sind Softtasten. Warum so, habe ich nicht verstanden :) Na gut.
Nun eine kleine Theorie.
Es gibt integrierte Barcode-Scanner, die keine Broadcasts senden können. Und es gibt Barcode-Scanner mit Tastaturemulation. Ich denke, diese Methode ist auch für sie geeignet. In beiden Fällen empfehle ich Ihnen, das "Präfix" beispielsweise auf
"="(KEYCODE_EQUALS)
. Und ersetzen Sie das Suffix durch
"CR"(KEYCODE_ENTER)
. Entfernen Sie alle anderen Suffixe und Präfixe. Die meisten Scanner mit Tastaturemulation in den Standardeinstellungen haben kein Präfix, geben jedoch gerne
CRLF
(zwei Zeichen. Wagenrücklauf, Zeilenvorschub) an. Sieht so aus, als wäre es historisch passiert.
Nun die Implementierung selbst. Erstellen Sie in der MainActivity-Klasse zwei Variablen. Der erste ist für die Verkettung von Barcode-Zeichen verantwortlich, der zweite für die Erfassung des Barcodes in einer Zeile zwischen dem Präfix und dem Suffix.
val barcodeStringBuilder = StringBuilder() var isReadingBarcode = false
Und in der Klasse müssen Sie die
onKeyUp
Funktion überschreiben
. override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
Das ist alles. Kommentare und Ergänzungen sind wie immer willkommen.