我目前正在为Android开发一个.NET MAUI Blazor应用程序,遇到了一个关于输入源识别的问题。具体来说,我需要区分来自Android虚拟键盘的输入和来自应用程序中物理条形码阅读器的输入。挑战在于准确识别和处理这两种不同类型的输入。如果有人有解决办法,请帮助我。
cpjpxq1n1#
在大多数情况下,你不能。大多数条形码扫描器都假装是硬件键盘。因此,来自其中一个的数据和来自连接到设备的蓝牙或USB键盘的数据之间没有区别。现在大多数的Android键盘(请不要谈论Android键盘-没有这样的事情。键盘是一个应用程序,许多OEM都有自己的键盘,所有Android设备都没有默认键盘)将使用commitText而不是实际的按键事件。因此,您可以为每个编辑文本(或其他接受键盘输入的视图)覆盖InputConnection,并以不同于KeyEvents的方式处理commitText和其他命令。但我不会建议它,它很可能是错误的,它不会为所有的键盘工作。
z31licg02#
并不引以为豪,但几年前,当我们有那些磁卡阅读器时,我不得不创建一个代码,来区分键盘输入和磁卡阅读器输入。(This你问的差不多)我的解决方案是检测这些符号被接收的速度。如果我一次接收一个字符,并且彼此之间有特定的时间间隔-我知道这是手动输入。所以我可以忽略它。这工作很好,到最后一天,我们使用磁性阅读器。我相信有更好的方法,我不会以任何方式推荐它。但它会工作,如果你不想出任何更好的。
2条答案
按热度按时间cpjpxq1n1#
在大多数情况下,你不能。大多数条形码扫描器都假装是硬件键盘。因此,来自其中一个的数据和来自连接到设备的蓝牙或USB键盘的数据之间没有区别。
现在大多数的Android键盘(请不要谈论Android键盘-没有这样的事情。键盘是一个应用程序,许多OEM都有自己的键盘,所有Android设备都没有默认键盘)将使用commitText而不是实际的按键事件。因此,您可以为每个编辑文本(或其他接受键盘输入的视图)覆盖InputConnection,并以不同于KeyEvents的方式处理commitText和其他命令。但我不会建议它,它很可能是错误的,它不会为所有的键盘工作。
z31licg02#
并不引以为豪,但几年前,当我们有那些磁卡阅读器时,我不得不创建一个代码,来区分键盘输入和磁卡阅读器输入。
(This你问的差不多)
我的解决方案是检测这些符号被接收的速度。如果我一次接收一个字符,并且彼此之间有特定的时间间隔-我知道这是手动输入。所以我可以忽略它。
这工作很好,到最后一天,我们使用磁性阅读器。
我相信有更好的方法,我不会以任何方式推荐它。但它会工作,如果你不想出任何更好的。