拦截条码扫描事件
Posted
技术标签:
【中文标题】拦截条码扫描事件【英文标题】:Intercept barcode scanning event 【发布时间】:2017-08-01 10:54:47 【问题描述】:我正在开发一个应用程序,该应用程序将安装在带有集成条形码扫描仪的移动设备中。 在我的页面中有不同类型的小部件,包括一个不可见的条目,我想用它来临时存储扫描的条形码值。 问题是用户可以点击页面中的所有小部件并与之交互,并且在未知的时刻,他可以扫描条形码。 我想在这个不可见的条目中强制焦点或截取输入的文本(因为条形码扫描就像键盘输入一样)。我怎么能这样做? 我正在使用带有 MVVM Prism 框架的 Xamarin.Forms 进行开发。
注意= 条码扫描不是用摄像头。
【问题讨论】:
以下答案建议使用 Xamarin SDK 是最好的,但另一种方法是使用意图。您描述的楔形功能(将条形码数据作为击键发送)是一种输出机制,包括答案中提到的 Zebra TC51 在内的一些制造商也允许与条形码数据一起发送意图 - 然后您可以在 Xamarin 应用程序中拦截意图并相应地填充 UI 字段。 嗨 Darryn,你能解释一下如何拦截扫描事件和数据吗?你有例子吗? 为了全面披露,我为 Zebra 工作,但考虑到这一点,我在我的个人 github 中有一个示例应用程序来演示如何拦截意图:github.com/darryncampbell/DataWedge-API-Exerciser 然后遵循 repo 自述文件中的设备配置部分示例应用程序将收到它,例如此行显示通过广播意图发送的扫描:github.com/darryncampbell/DataWedge-API-Exerciser/blob/master/… 【参考方案1】:使用“键盘模拟”从扫描仪读取条形码不是一个好主意。我不知道您在使用什么(通过蓝牙连接的外部条形码阅读器,集成的条形码阅读器),但通常您不应该有一个带有焦点的条目来读取从扫描仪接收到的字符串。
如果您使用的是通过蓝牙连接的外部条形码阅读器,我建议阅读this article
否则,如果您使用集成扫描仪(如 TC51 Zebra 设备),则应使用 SDK。
如果您使用的是 TC51,您可以在此处找到 SDK for Xamarin 和 here 示例,了解如何在 Xamarin.android 中使用它。
如果您必须在 Xamarin Forms 中进行测试,您必须执行与 Xamarin.Android 相同的操作,并且当您收到条形码时,使用 MessagingCenter 发送到您的 XF 应用
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);
【讨论】:
非常感谢您的帮助。现在我尝试在 Xamarin.Forms 中做同样的事情。 Alessandro 我试图将 Zebra SDK 包含在我的项目中,但我有两个问题:第一个问题是现在该应用程序无法在传统智能手机(三星 Galaxy S4)中运行,可能是因为它不能没有扫描仪硬件。应用程序在启动时崩溃。我尝试在 AndroidManifest.xml 中使用 android:required="false" 但没有好的结果。第二个问题是我不知道 messageCenter 是如何工作的。我试图将消息从 Android 项目的 MainActivity(我可以参考 Zebra SDK)发送到便携式项目,但没有成功。 另一个注意事项:我无法调试,因为我没有 Zebra 的 USB 电缆。 为什么要将外部条码扫描器通过电线连接到设备?为什么一定要摄像头扫描或蓝牙扫描? 使用键盘模拟,您应该确保拥有带有焦点的 ui 控件并且它可以接收字符,否则您会丢失数据。出于这个原因,最好让扫描仪处于 SPP 模式,这样您就可以打开蓝牙套接字并完全控制接收器数据。以上是关于拦截条码扫描事件的主要内容,如果未能解决你的问题,请参考以下文章