Сканер штрих-кода - (Data Wedge) устройство TC26 дважды считывает данные в EditText
Я работаю над сканером штрих-кода, используя API DataWedge для устройства TC26. Иногда я вижу значение в EditTextBox, значение отображается дважды случайным образом. Например: сканируется значение 123, но в EdittextBox отображается 123123. Я пытался очистить EditTextBox и снова установить значение, но все равно не повезло.
Код для получения результата лазерного сканирования.
open fun initPackageScan(
context: Context?,
listener: PackageScanListener
){
this.packageScanListener = listener
}
inner class ScanBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
if (action == BuildConfig.APPLICATION_ID) {
// Received a barcode scan
try {
var scanData = intent.getStringExtra(DWInterface.DATAWEDGE_SCAN_EXTRA_DATA_STRING)
var symbology = intent.getStringExtra(DWInterface.DATAWEDGE_SCAN_EXTRA_LABEL_TYPE)
Timber.i("Scanned item $scanData and it's type $symbology")
if(!scanData.isNullOrEmpty() || !symbology.isNullOrEmpty()) {
var labelType = symbology?.substringAfterLast("-")
packageScanListener.onPackageScanned(scanData, labelType)
}
}
catch (e: Exception) {
Timber.e(e)
e.printStackTrace()
}
}
}
В onReceive моего BroadcastReceiver() я всегда получаю правильный вывод, например, если отсканированное значение равно 123, то 123 возвращается в onReceive. Ниже приведен код, в котором в методе обратного вызова я устанавливаю отсканированное значение в editText:
override fun onPackageScanned(packageId: String, barcodeType: String) {
Timber.i ("Scanned value :: %s", scanEditText.text.toString())
scanEditText.text.clear() // trying to clear before setting the value
scanEditText.setText(packageId) // the value to be set on editText
}
Я пробовал на следующих устройствах TC25(отлично работает), TC57, TC56 и TC26 иногда случайным образом показывают одно и то же значение.
Любая помощь будет здорово.
Спасибо
1 ответ
Откуда взялось это спорадическое поведение, трудно ответить, потому что вы показываете
Правильное ведение журнала не будет регистрироваться
Timber.i("Scanned value :: %s", scanEditText.text.toString())
Но фактическая входная строка (где имя переменной немного сбивает с толку):
Timber.d("Scanned value :: %s", packageId)
Вы также можете заменить DataWedge на EMDK, который поставляется с подключаемым модулем Android Studio.