Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测来自软件或硬件键盘的输入_Android_Android Softkeyboard_Android Hardware Keyboard - Fatal编程技术网

Android 检测来自软件或硬件键盘的输入

Android 检测来自软件或硬件键盘的输入,android,android-softkeyboard,android-hardware-keyboard,Android,Android Softkeyboard,Android Hardware Keyboard,我在一个Android应用程序中工作,该应用程序必须使用RFID标签阅读器。我把这个读卡器作为一个额外的设备,用OTG线连接在我的microUSB中。安卓正在将此设备检测为输入键盘。我想知道我是否可以通过编程检测用户何时使用该阅读器进行输入。所以基本上我必须区分我的软键盘或这个阅读器的输入。我搜索了很多,但我找不到解决方案,任何帮助都将不胜感激。多谢各位 yourEditText.setOnKeyListener(new View.OnKeyListener() { @Overr

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

yourEditText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            return false;
        }
    });
这将检测是否正在使用硬件键盘编辑editText


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

在kotlin中,我使用KeyEvent来确定输入是否来自外部RFID标签读取器。当我不想允许插入值来编辑来自RFID阅读器的_文本时,我使用以下方法:

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

还可以查看并尝试使用它来解决您的问题

您可以尝试使用StartCandidateView(android.view.inputmethod.EditorInfo,boolean)我读过该函数,但我不理解它的用法OK。您到底想做什么?如果输入的数字(即“123456”)是由软键盘或我的设备插入的,我想在编辑文本中进行区分。我正在查找有关函数onStartCandidatesView()的一些信息,但我找不到任何信息,因此如果触发了keydown事件,您可以尝试使用它。这意味着输入来自软输入,而来自硬输入。这不是100%正确。它只能保证在硬件键盘上工作。它可能对软件键盘起作用,也可能不起作用,这取决于软件键盘是否向Android发送硬件键盘命令(除了在奇怪的情况下,大多数情况下不会发送硬件键盘命令,但有一个这样做的命令)。这是一个不错的解决方案,只是在用户实际输入之前无法找到答案。。。