Поймать ввод с клавиатуры со сканера штрих-кода

Я создаю базовое приложение для проверки цен, которое сканирует штрих-код и отображает информацию о продукте, и я пытаюсь запустить его на планшете на базе Android, который поставляется со встроенным сканером штрих-кода.

Сканер работает, и если я помещаю текстовое поле в приложение и фокусируюсь на нем, сканируемый мной штрих-код записывается на него нормально, однако я не смог поймать ввод, не сосредоточив приложение на текстовом поле (приложение должно иметь нет областей ввода, только изображения и текстовые метки).

Сканер отображается как HID-клавиатура во входных настройках Android.

Почти все статьи, которые я нахожу здесь, посвящены использованию камеры для сканирования штрих-кодов (я построил свой оригинальный прототип, используя это, но производительность была невысокой). Одно старое сообщение здесь дало мне подсказку о переопределении dispatchKeyEvent как такового

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getCharacters() != null && !event.getCharacters().isEmpty()) {
        isRunning = true;
        Log.d(TAG, "Starting");

        String barcode = event.getCharacters();
        new myImageTask().execute(barcode);
    }
    return super.dispatchKeyEvent(event);
}

Однако, похоже, он не улавливает никаких входных данных.

Я посмотрел на переопределение событий KeyUp и KeyDown, но, похоже, они явно созданы для перехвата событий с одним ключом.

Есть ли другое событие, которое я мог бы использовать, чтобы поймать и прочитать полный ввод сканера, или я должен просто связать событие KeyDown для буферизации каждого отдельного ключа в статическую переменную и после получения специального символа завершения ввода и запустить мою задачу по результату?

На всякий случай: есть ли у планшета со встроенным сканером SDK для прямого доступа к данным штрих-кода?

Morrison Chang 31.07.2018 21:26

Поставщик не предоставил никаких SDK или информации по одному из них. Компонент сканера отображается как бренд Honeywell, поэтому, возможно, я мог бы проверить там, нет ли возможности чтения их ввода с базового уровня Android.

ConnorU 31.07.2018 21:30

Если не удалось найти SDK (обычный поиск по номеру модели или изображению аналогичного устройства, если модель была изменена), вы можете попробовать использовать текст редактирования 1x1, который будет удерживать фокус и захватывать скрытый ввод.

Morrison Chang 31.07.2018 21:44
0
3
1 718
1

Ответы 1

Посмотрите, может ли приведенный ниже код вам помочь:

barcodeEditText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                switch (keyCode)
                {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER:
                            saveToDBMethod();
                            barcodeEditText.setText("");
                            barcodeEditText.requestFocus();
                        return true;
                    default:
                        break;
                }
            }

            return false;
        }
    });

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