Я создаю базовое приложение для проверки цен, которое сканирует штрих-код и отображает информацию о продукте, и я пытаюсь запустить его на планшете на базе 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 или информации по одному из них. Компонент сканера отображается как бренд Honeywell, поэтому, возможно, я мог бы проверить там, нет ли возможности чтения их ввода с базового уровня Android.
Если не удалось найти SDK (обычный поиск по номеру модели или изображению аналогичного устройства, если модель была изменена), вы можете попробовать использовать текст редактирования 1x1, который будет удерживать фокус и захватывать скрытый ввод.
Посмотрите, может ли приведенный ниже код вам помочь:
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;
}
});
На всякий случай: есть ли у планшета со встроенным сканером SDK для прямого доступа к данным штрих-кода?