【问题标题】:How to identify if text input was from hardware barcode scanner vs soft keyboard on android?如何识别文本输入是来自硬件条码扫描仪还是安卓上的软键盘?
【发布时间】:2017-12-16 19:17:37
【问题描述】:

我们正在开发一个应用程序,该应用程序在带有内置条码扫描器的 Android 设备上运行。我们正在尝试识别文本输入是来自软键盘还是来自条形码扫描仪,因为我们希望让输入文本框的行为有所不同。

例如,如果我们确定输入来自条形码扫描仪,我们希望删除现有文本以将其覆盖。如果它来自软键盘,我们想留下文本,因为用户仍在输入它。

现在我们正在获取字符之间的时间长度来决定它是来自键盘还是来自条形码扫描仪,但我试图弄清楚是否有一种方法可以识别来自 android 的输入源。

也许这在很大程度上取决于硬件细节,但希望我能从这里获得一些好的线索,谢谢!

【问题讨论】:

  • 如果条形码扫描仪充当键盘附件,则它是硬件、Android 设备和操作系统特定的。 (高端)扫描仪通常有一个 SDK 可用于直接从扫描仪读取而不是允许它发送击键,因此您可以更好地控制扫描过程......您可以查看 KeyEventsource尝试判断是软键盘还是硬键盘

标签: android xamarin barcode android-softkeyboard


【解决方案1】:

免责声明:我为 Zebra Technologies 工作,该公司生产带有集成条码扫描器的 Android 设备。

您的方法(测量字符之间的延迟)应该可行,但可能在很大程度上取决于您所针对的设备,并且您可以预期不同的时间会转移到不同的设备。

通常,这些 Android 设备包含一个可用于读取条形码的 SDK。在大多数情况下,这些 SDK 仅适用于 Java,然后您应该构建自己的绑定以在 Xamarin 中使用它们(请注意,Zebra Technologies 支持 JavaXamarin)。

如果您不需要完全控制条形码扫描仪(从您的初始方法看来),一个更好的方法是使用可以将条形码数据作为键码事件注入的“Wedge”应用程序,这通常是在这类设备上提供。

注意 1: 这些“楔形”应用程序中的一些允许向条形码数据插入前缀和后缀,您可以对其进行配置。然后,您可以使用这些数据来识别条形码数据的开始和结束。例如,在 Zebra 的 Android 设备上,我们的 DataWedge 允许此类 Basic Data Formatting

注意 2: 更好的方法(如果您的设备的“Wedge”应用程序支持它)是使用 Intents 将数据发送到应用程序。同样,Zebra 的 DataWedge 允许将不同的配置文件分配给前台活动和 deliver the data as an Intent

如您所见,这些解决方案对单个供应商来说是紧密的,但从这个角度来看,在时间上工作可能并没有好多少,而且更容易出错。支持多个硬件品牌的另一种方法是为您的特定设备构建自定义“楔形”应用程序。最后Zebra's Developer Event in Prague - AppForum 我们提供了一些关于如何做到这一点的例子。您可以在我的一位同事的这篇博文中找到一些信息:Writing Enterprise Android applications that capture barcode data and run on multiple devices

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多