【问题标题】:Detect input from software or hardware keyboard检测来自软件或硬件键盘的输入
【发布时间】:2015-04-21 10:12:25
【问题描述】:

我正在使用一个必须使用 RFID 标签阅读器的 Android 应用程序。我将此阅读器用作通过 OTG 线连接到我的 microUSB 中的额外设备。 Android 正在将此设备检测为输入键盘。我想知道我是否可以以编程方式检测用户何时使用此阅读器进行输入。所以基本上我必须区分我的软键盘或这个阅读器的输入。我搜索了很多,但我找不到解决方案,任何帮助将不胜感激。非常感谢。

【问题讨论】:

  • 你可以试试developer.android.com/reference/android/inputmethodservice/…onStartCandidatesView(android.view.inputmethod.EditorInfo, boolean)
  • 我读过那个函数,但我不明白它的用途
  • 好的。你到底想做什么?
  • 如果软键盘或我的设备插入了输入的数字,即“123456”,我想在editText中有所不同。我正在寻找有关 onStartCandidatesView() 函数的一些信息,但我找不到任何如此确凿的信息
  • 你可以尝试使用OnKeyListener如果keydown事件被触发意味着输入来自软输入否则来自硬输入

标签: android android-softkeyboard android-hardware-keyboard


【解决方案1】:
yourEditText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            return false;
        }
    });

这将检测您的 editText 是否正在使用硬件键盘进行编辑。

here 所述,这仅对硬件键盘有用,因此在您的情况下,如果未调用此接口,则意味着 editText 输入应来自软件键盘。

【讨论】:

  • 这不是 100% 正确的。它只保证适用于硬件键盘。它可能适用于软键盘,也可能不适用于软键盘,具体取决于软键盘是否正在向 Android 发送硬件键盘命令(除了在奇怪的情况下,大多数情况下都不会,但有一个命令可以这样做)。
  • 这是一个不错的解决方案,只是在用户实际输入之前无法找出...
【解决方案2】:

在 kotlin 中,我使用 KeyEvent 来确定输入是否来自外部 RFID 标签阅读器。当我不想允许从 RFID 阅读器向 edit_text 插入值时,我正在使用这个:

edit_text.setOnKeyListener { _, _, event -> !event.device.isVirtual }

另请参阅docs 并尝试使用它来解决您的问题

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2012-10-27
    • 2011-06-09
    • 2011-07-24
    • 2012-07-21
    • 2014-11-28
    • 2017-08-30
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多