如何在代码中禁用物理键盘(始终使用虚拟键盘)

时间:2011-11-15 22:04:56

标签: android android-virtual-keyboard

您可能会问我为什么要这样做。原因如下:

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

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

6 个答案:

答案 0 :(得分:7)

尝试以下

Settings> Language & Input>在Keyboard and input methods下点击Default。是否可以选择取消选中或禁用硬件/物理键盘?

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

答案 1 :(得分:3)

这似乎对你的案子有一些启示。来自Configuration课程文档。

  

public int hardKeyboardHidden ---在API级别3中添加

     

指示硬键盘是否具有的标志   被隐藏了。这将在具有隐藏机制的设备上设置   来自用户的键盘,当该机制关闭时。之一:   HARDKEYBOARDHIDDEN_NO,HARDKEYBOARDHIDDEN_YES。

您可以对此配置更改采取一些措施。但我认为没有办法在Android中禁用物理键盘。

更新

There mHardKeyboardSwitch是一个私有成员,其中包含对SwitchView的引用,用于反映用户的硬件键盘首选项。它不能用于禁用硬件键盘,因为它无法在该类之外访问。

答案 2 :(得分: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();
  }
}

答案 3 :(得分:2)

我认为你可以在你的软件输入模式中指定要使用的清单文件并处理键盘的配置更改| keyboard_hidden

答案 4 :(得分:1)

运行以下两个命令:-

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

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

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

答案 5 :(得分: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;