Сканер штрих-кода - (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.

Другие вопросы по тегам