从Xamarin Entry外部的物理激光扫描仪捕获输入

问题描述

我正在使用Xamarin.Forms(XAML + C#)为带有内置激光条形码扫描仪的PDA制作仓库库存的Android应用。

工作人员将条形码和换行符一起扫描到名为ProductBarcode的条目中,以触发该条目中的 Completed 事件,因此可以通过事件处理程序,带有这样的代码

private void ProductBarcode_Completed(object sender,EventArgs e)
{
    if (!Product.IsValidBarcode(ProductBarcode.Text))
        displayAlert("Error","Invalid Product Barcode.","Okay");
    else /* Use of ProductBarcode (irrelevant) */;
}

工作正常。但是问题在于,工作人员经常触摸屏幕(视图背景),并且Entry失去焦点。因此,当他们尝试扫描下一个代码时,通常会按下物理扫描按钮(例如在EDA50K或类似设备中),并且输入内容不会读入条目中,并且会丢失。

我想知道是否有可能(或没有)捕获发送到ContentPage后台的输入并将其发送到正确的Entry。甚至可以从屏幕上的任何地方捕获输入。

解决方法

我在寻找对 android 和 ios 扫描条形码的表单支持时遇到了这个问题。我以前的应用程序是原生 xamarin android 应用程序,我用它来普遍捕获扫描的输入:

        public override void HandleDispatchKeyEvent(KeyEvent e) {
        if (!string.IsNullOrWhiteSpace(e.Characters)) {
            HandleInput(e.Characters);
        }
        else if (e.Action == KeyEventActions.Up) {
            if (e.KeyCode == Keycode.Enter) {
                HandleInput(_barcodeChacacters);
                _barcodeChacacters = "";
            }
            else {
                _barcodeChacacters += e.DisplayLabel;
            }
        }
    }

那是我添加到基本视图中的隐藏片段的内部代码。我知道 xamarin 形式的事件 droid 的命名略有不同,但我假设它的工作原理相同。我还没有尝试过,因为我需要一个适用于 Android 和 iOS 的解决方案。但由于您只是针对 android,如果您在这么长时间后仍然需要解决方案,希望能有所帮助。