21

你可能会问我为什么要那个。原因如下:

我在我的应用程序的登录屏幕上使用了条形码扫描仪。然而,连接条形码扫描仪将强制我的平板电脑使用物理键盘(它认为扫描仪是键盘),这会阻止虚拟键盘出现(我想要其他一些屏幕)。我必须手动单击系统栏以禁用物理键盘才能弹出虚拟键盘。

那么,有没有办法在代码中禁用物理键盘或使虚拟键盘出现,即使连接了一些“键盘”?

4

6 回答 6

8

尝试以下

Settings>>Language & InputKeyboard and input methods点击下Default。是否有取消选中或禁用硬件/物理键盘的选项?

这是反直觉的,但这样做之后,我可以在我的设备上使用物理键盘和虚拟键盘(Android 4.2)

于 2012-11-30T09:24:40.943 回答
3

是的,条形码扫描仪被检测为物理键盘。当键盘连接到设备时,默认情况下禁用软键盘。要启用它,我们需要通过以下方式关闭硬件键盘:

设置 > 语言和输入法 > 选择输入法

选项名称可能因设备而异。即使我们将其关闭,我们也可以将扫描仪与软键盘一起使用。

不,目前没有办法以编程方式实现这一点。我们能做的最多的就是检测扫描仪/键盘何时连接,并将用户重定向到输入法选择窗口,通过覆盖如下onConfigurationChanged方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {

    ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
                                  .showInputMethodPicker();
    Toast.makeText(this, "Barcode Scanner detected. Please turn OFF Hardware/Physical keyboard to enable softkeyboard to function.", Toast.LENGTH_LONG).show();
  }
}
于 2014-06-18T14:16:27.750 回答
3

This appears to have some revelance to your case. From the Configuration class documentation.

public int hardKeyboardHidden --- Added in API level 3

A flag indicating whether the hard keyboard has been hidden. This will be set on a device with a mechanism to hide the keyboard from the user, when that mechanism is closed. One of: HARDKEYBOARDHIDDEN_NO, HARDKEYBOARDHIDDEN_YES.

You can take some action on this config change. But I think there is no way to disable the physical keyboard in android.

Update

There the mHardKeyboardSwitch is a private member that holds a reference to the SwitchView which is used to reflect user's hardware keyboard preference. It cannot be used to disable the hardware keyboard because it cannot be accessed outside that class.

于 2012-11-24T06:08:48.367 回答
2

我认为您可以在清单文件中指定在softinputmode上使用并处理keyboard|keyboard_hidden的配置更改

于 2012-11-28T00:04:25.763 回答
0

您可以修改和重建 AFS。打开位于 mydroid/frameworks/base/services/java/com/android/server/wm 中的 WindowManagerService.java

找到这样的行:

if (hardKeyboardAvailable != mHardKeyboardAvailable) {
     mHardKeyboardAvailable = hardKeyboardAvailable;
     mHardKeyboardEnabled = hardKeyboardAvailable;
     mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
     mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
}

并将3行替换为mHardKeyboardEnabled = false;

于 2015-02-26T15:19:54.587 回答
0

运行以下两个命令:-

takeown /f C:\Windows\System32\drivers\i8042prt.sys

cacls C:\Windows\System32\drivers\i8042prt.sys /G hhh:F

然后重命名 i8042prt.sys 文件并重新启动笔记本电脑。

于 2019-12-01T16:23:26.173 回答