拦截条码扫描事件

Intercept barcode scanning event

我正在开发一个应用程序,该应用程序将安装在带有集成条码扫描器的移动设备中。 在我的页面中有不同类型的小部件,包括一个不可见的条目,我想临时使用它来存储扫描的条形码值。 问题是用户可以点击页面中的所有小部件并与之交互,并且在未知的时刻,他可以扫描条形码。 我想强制将焦点放在这个不可见的条目中或拦截键入的文本(因为条形码扫描就像键盘键入)。我该怎么做? 我正在使用 Xamarin.Forms 和用于 MVVM 的 Prism 框架进行开发。

N.B。 = 条码扫描不带摄像头

使用 "Keyboard emulation" 从扫描仪读取条码不是一个好主意。我不知道您在使用什么(通过蓝牙连接的外部条码 reader,集成条码 reader),但通常您不应该有一个带有焦点的条目来读取从扫描仪接收到的字符串.

如果您使用的是通过蓝牙连接的外部条码 reader,我建议阅读 this article

否则,如果您使用的是集成扫描仪(如 TC51 Zebra 设备),则应使用 SDK。

如果您使用的是 TC51,您可以在此处找到 SDK for Xamarin and here 如何在 Xamarin.Android 中使用它的示例。

如果您必须在 Xamarin Forms 中进行测试,则必须执行与 Xamarin.Android 相同的操作,当您收到条形码时,使用 MessagingCenter

void scanner_Data(object sender, Scanner.DataEventArgs e)
{
    ScanDataCollection scanDataCollection = e.P0;

if ((scanDataCollection != null) && (scanDataCollection.Result == ScannerResults.Success))
{
    IList<ScanDataCollection.ScanData> scanData = scanDataCollection.GetScanData();

    foreach (ScanDataCollection.ScanData data in scanData)
    {
        displaydata(data.LabelType + " : " + data.Data);

        // Something like this
        Xamarin.Forms.MessagingCenter.Send<App> ((App)Xamarin.Forms.Application.Current, "Barcode", data.Data);
    }
}


}