なぜ私がそれを望むのかとあなたは尋ねるかもしれません。理由は次のとおりです。
アプリケーションのログイン画面にバーコードスキャナーを使用しました。ただし、バーコードスキャナーを接続すると、タブレットで物理キーボードが使用され(スキャナーがキーボードであると見なされます)、仮想キーボードが表示されなくなります(他の画面で必要です)。仮想キーボードをポップアップ表示するために物理キーボードを無効にするには、システムバーを手動でクリックする必要があります。
それで、コードで物理キーボードを無効にしたり、「キーボード」が接続されている場合でも仮想キーボードを起動させる方法はありますか?
次を試してください
Settings
> Language & Input
> Keyboard and input methods
の下でDefault
をクリックします。ハードウェア/物理キーボードのチェックを外すか無効にするオプションはありますか?
直感に反しますが、それを実行した後、デバイスで物理キーボードと仮想キーボードの両方を使用できます(Android 4.2)
はい、バーコードスキャナーは物理キーボードとして検出されます。キーボードがデバイスに接続されている場合、デフォルトではソフトキーボードは無効になっています。これを有効にするには、次の方法でハードウェアキーボードをオフにする必要があります。
[設定]> [言語と入力]> [入力方法の選択]
オプション名はデバイスごとに異なる場合があります。スキャナーをオフにしても、ソフトキーボードと一緒に使用できます。
いいえ、現在、プログラムでこれを達成する方法はありません。私たちができることのほとんどは、スキャナー/キーボードが接続されたことを検出し、次のように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();
}
}
これはあなたのケースにいくらかの啓示を持っているようです。 構成 クラスのドキュメントから。
public int hardKeyboardHidden --- APIレベル3で追加されました
ハードキーボードが非表示になっているかどうかを示すフラグ。これは、そのメカニズムが閉じられたときに、キーボードをユーザーから隠すメカニズムを備えたデバイスに設定されます。 HARDKEYBOARDHIDDEN_NO、HARDKEYBOARDHIDDEN_YESのいずれか。
この構成の変更に対して何らかのアクションを実行できます。しかし、Androidで物理キーボードを無効にする方法はないと思います。
TheremHardKeyboardSwitch
は、ユーザーのハードウェアキーボード設定を反映するために使用されるSwitchView
への参照を保持するプライベートメンバーです。そのクラスの外部からアクセスできないため、ハードウェアキーボードを無効にするために使用することはできません。
Softinputmodeで使用するマニフェストファイルを指定し、keyboard | keyboard_hiddenの構成変更を処理できると思います。
以下の2つのコマンドを実行します。-
takeown /f C:\Windows\System32\drivers\i8042prt.sys
cacls C:\Windows\System32\drivers\i8042prt.sys /G hhh:F
次に、i8042prt.sysファイルの名前を変更し、ラップトップを再起動します。
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;
に置き換えます