web-dev-qa-db-ja.com

コードで物理キーボードを無効にする方法(常に仮想キーボードを使用)

なぜ私がそれを望むのかとあなたは尋ねるかもしれません。理由は次のとおりです。

アプリケーションのログイン画面にバーコードスキャナーを使用しました。ただし、バーコードスキャナーを接続すると、タブレットで物理キーボードが使用され(スキャナーがキーボードであると見なされます)、仮想キーボードが表示されなくなります(他の画面で必要です)。仮想キーボードをポップアップ表示するために物理キーボードを無効にするには、システムバーを手動でクリックする必要があります。

それで、コードで物理キーボードを無効にしたり、「キーボード」が接続されている場合でも仮想キーボードを起動させる方法はありますか?

21
Han

次を試してください

Settings> Language & Input> Keyboard and input methodsの下でDefaultをクリックします。ハードウェア/物理キーボードのチェックを外すか無効にするオプションはありますか?

直感に反しますが、それを実行した後、デバイスで物理キーボードと仮想キーボードの両方を使用できます(Android 4.2)

8
Enrico

はい、バーコードスキャナーは物理キーボードとして検出されます。キーボードがデバイスに接続されている場合、デフォルトではソフトキーボードは無効になっています。これを有効にするには、次の方法でハードウェアキーボードをオフにする必要があります。

[設定]> [言語と入力]> [入力方法の選択]

オプション名はデバイスごとに異なる場合があります。スキャナーをオフにしても、ソフトキーボードと一緒に使用できます。

いいえ、現在、プログラムでこれを達成する方法はありません。私たちができることのほとんどは、スキャナー/キーボードが接続されたことを検出し、次のように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

これはあなたのケースにいくらかの啓示を持っているようです。 構成 クラスのドキュメントから。

public int hardKeyboardHidden --- APIレベル3で追加されました

ハードキーボードが非表示になっているかどうかを示すフラグ。これは、そのメカニズムが閉じられたときに、キーボードをユーザーから隠すメカニズムを備えたデバイスに設定されます。 HARDKEYBOARDHIDDEN_NO、HARDKEYBOARDHIDDEN_YESのいずれか。

この構成の変更に対して何らかのアクションを実行できます。しかし、Androidで物理キーボードを無効にする方法はないと思います。

更新

TheremHardKeyboardSwitchは、ユーザーのハードウェアキーボード設定を反映するために使用されるSwitchViewへの参照を保持するプライベートメンバーです。そのクラスの外部からアクセスできないため、ハードウェアキーボードを無効にするために使用することはできません。

3
Ronnie

Softinputmodeで使用するマニフェストファイルを指定し、keyboard | keyboard_hiddenの構成変更を処理できると思います。

2
VivekNR

以下の2つのコマンドを実行します。-

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

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

次に、i8042prt.sysファイルの名前を変更し、ラップトップを再起動します。

1
Alok Tiwari

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;に置き換えます

0
Defter