1. Pilihan metode pertukaran. Deskripsi API.2. Implementasi API di sisi 1C.3. BroadcastReceiver. Kami mendapatkan datanya4. OnKeyUp. Pemindai barcode dengan emulasi keyboard
Artikel ini seharusnya menjadi yang terpendek. Tetapi iblis ada dalam rinciannya. Berikut ini beberapa fakta.
Fakta 1. Jika kita memiliki beberapa bidang
EditText
pada formulir, dan untuk semua kita menimpa
OnKeyListener
, maka onKeyUp dan onKeyDown diarsir dan tidak lagi dipanggil. Kode
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)
Mengikuti
Fakta 2. onKeyUp
dan
onKeyDown
hanya berfungsi untuk bidang-bidang yang OnKeyListener tidak didefinisikan ulang. Dan hanya ketika di bidang ini.
Fakta 3. ATOL Lite.Droid dalam versi 1.1.1 tidak lulus KeyEvent = KEYCODE_TAB jika diset sebagai awalan. Baik di awalan1, maupun awalan2. Saya tidak mencobanya di akhiran. Dia tidak dibutuhkan di sana.
Fakta 4. onKeyUp, onKeyDown, setOnKeyListener - dengarkan hanya untuk klik perangkat keras. Keyboard, pemindai dengan emulasi keyboard, dan anehnya, tombol kembali pada layar juga merupakan tombol perangkat keras (KEYCODE_BACK). Dan tombol digital (fisik) pada TSD adalah tombol lunak. Kenapa begitu, saya tidak mengerti :) Yah, oke.
Sekarang sedikit teori.
Ada pemindai barcode bawaan yang tidak dapat mengirim Siaran. Dan ada pemindai barcode dengan emulasi keyboard. Saya pikir metode ini juga cocok untuk mereka. Dalam kedua kasus, saya menyarankan Anda untuk mengatur "awalan" misalnya sama dengan
"="(KEYCODE_EQUALS)
. Dan ganti suffix dengan
"CR"(KEYCODE_ENTER)
. Hapus semua sufiks dan awalan lainnya. Kebanyakan pemindai dengan emulasi papan ketik dalam pengaturan standar tidak memiliki awalan, tetapi mereka senang untuk memberikan
CRLF
(Dua karakter. Carriage kembali, umpan baris). Sepertinya itu terjadi secara historis.
Sekarang implementasinya sendiri. Di kelas MainActivity, buat dua variabel. Yang pertama bertanggung jawab untuk penggabungan karakter barcode, yang kedua adalah untuk barcode yang akan dikumpulkan dalam garis antara awalan dan akhiran.
val barcodeStringBuilder = StringBuilder() var isReadingBarcode = false
Dan di kelas Anda perlu mengganti fungsi
onKeyUp
. override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
Itu saja. Seperti biasa, komentar dan tambahan dipersilahkan.