1. Выбор способа обмена. Описание API.
2. Реализация API на стороне 1С.
3. BroadcastReceiver. Получаем данные
4. OnKeyUp. Сканер ШК с эмуляцией клавиатуры
Эта статья должна была стать самой короткой. Но дьявол в деталях. Вот несколько фактов.
Факт 1. Если у нас на форме есть несколько полей EditText
, и для всех мы переопределим OnKeyListener
, то onKeyUp и onKeyDown затеняются и больше не вызываются. Код.
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)
Из этого следует
Факт 2. onKeyUp
и onKeyDown
срабатывают только для тех полей, для которых не переопределен OnKeyListener. И только при нахождении в данном поле.
Факт 3. АТОЛ Lite.Droid в версии 1.1.1 не передает KeyEvent = KEYCODE_TAB если он выставлен в качестве префикса. Ни в префикс1, ни в префикс2. В суффикс я его не пробовал. Он там не нужен.
Факт 4. onKeyUp, onKeyDown, setOnKeyListener — слушают только аппаратные нажатия. Клавиатура, сканер с эмуляцией клавиатуры, и как ни странно, кнопка «назад» на экране, это тоже аппаратная кнопка («KEYCODE_BACK»). А цифровые кнопки(физические) на ТСД это — программные кнопки. Почему так, я не понял :) Ну да ладно.
Теперь немного теории.
Читать полностью »