2017-08-01 103 views
0

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

N.B. =条形码扫描不在凸轮上。

+0

的下面的答案表明使用Xamarin SDK是最好的,但另一种方法是使用意图。您所描述的楔形功能(将条形码数据作为击键发送)是一种输出机制,包括回答中提及的Zebra TC51在内的一些制造商也允许将条形码数据与Intent一起发送 - 然后您可以拦截Xamarin应用程序中的意图并相应地填充UI字段。 –

+0

嗨Darryn,你能解释我如何拦截扫描事件和数据?你有没有例子? – TeoVr81

+0

为了充分披露,我为Zebra工作,但考虑到这一点,我在我的个人github上有一个示例应用程序来演示如何拦截意图:https://github.com/darryncampbell/DataWedge-API-Exerciser请按照设备配置部分在回购自述文件中,示例应用程序将收到它,例如此行显示通过广播意图发送的扫描:https://github.com/darryncampbell/DataWedge-API-Exerciser/blob/master/app/src/main/java/com/zebra/datawedgeexerciser/MainActivity.java#L488 –

回答

3

使用“键盘仿真”从扫描仪读取条形码并不是一个好主意。我不知道你在用什么(通过蓝牙连接的外部条形码阅读器,一个集成的条形码阅读器),但通常你不应该有一个焦点输入来阅读从扫描仪收到的字符串。

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

否则,如果您使用的是集成式扫描器(如TC51斑马设备),你应该使用SDK。

如果您使用的是TC51,您可以在这里找到SDK for Xamarinhere的一个示例如何在Xamarin.Android中使用它。

如果你必须测试在Xamarin形式,你必须做你与Xamarin.Android做同样的事情,当你收到一个条形码,发送到您的XF应用与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); 
    } 
} 


} 
+0

非常感谢您的帮助。现在我试着在Xamarin.Forms中做同样的事情。 – TeoVr81

+0

Alessandro我试图将Zebra SDK包含在我的项目中,但我遇到了两个问题:第一个问题是现在应用程序无法在传统的智能手机(Samsung Galaxy S4)中使用,也许是因为它没有扫描仪硬件。该应用程序在启动时崩溃。我在AndroidManifest.xml中用android:required =“false”尝试过,但没有很好的结果。第二个问题是我不知道messageCenter如何工作。我尝试从Android项目的MainActivity(我可以参考Zebra SDK)将消息发送到Portable项目,但没有成功。 – TeoVr81

+0

另一个说明:我无法调试,因为我没有用于Zebra的USB电缆。 – TeoVr81