更新: 参照を読み違えました。止められないキーコードはALTとMETA_LEFT
この投稿のタイトルを更新しました。本当に申し訳ない。
Bluetoothマウスプレゼンターを使用して制御するアプリがあります。1 つを除いて、デバイスのすべてのボタンを傍受しました。押すと、Google Play に移動したり、どの音楽プレーヤーを使用するかを尋ねるポップアップが表示されるなど、アプリ以外でさまざまなことが起こります。私はそれを傍受しようとしましたが失敗しました。キーコードを通過させずに Toast を実行するだけのテスト コードでさえ、この 1 つのキーコードを通過させます。
問題のキーコードは 57 と 117 で、これはこれによると ALT-MENUです。
このコードは、このキー以外のキーを正常にインターセプトできます。たとえば、24 のケースを追加すると、タブレットまたはマウス プレゼンターの音量を上げるキーが機能しなくなります。
@override // tried both with and without the override
public boolean dispatchKeyEvent(KeyEvent ke){
int keyCode = ke.getKeyCode();
if(ke.getAction() == KeyEvent.ACTION_DOWN){
Toast.makeText(this, String.valueOf(keyCode), Toast.LENGTH_SHORT).show();
switch (keyCode)
{
case 117:
case 57:
case 44:
case 59:
return true;
case 30:
Intent target = new Intent(this, StartLine2.class);
startActivity(target);
return true;
case 19:
new Thread(new Runnable() {
@Override
public void run() {
new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_TAB);
}
}).start();
return true;
case 20:
new Thread(new Runnable() {
@Override
public void run() {
new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
}
}).start();
return true;
}
}
else if(ke.getAction() == KeyEvent.ACTION_UP){
switch (keyCode){
case 117:
case 57:
case 30:
case 44:
case 59:
case 19:
case 20:
return true;
}
}
return super.dispatchKeyEvent(ke);
}
私が期待するのは、57 と 117 の両方が dispatchKeyEvent に渡されないため、何もしないということです。しかし、私が言ったように、彼らはいくつかのプロセスを開始します。以前は Google Play でしたが、現在は音楽プレーヤーを選択するよう求められているようです。「... を使用して操作を完了してください」
理想的には、そのキーを何か便利なものに使用したいのですが、フォールバックとして、誤って押してアプリを台無しにしないようにすることは、2番目の選択肢としては問題ありません。
どうすればいいのかわからないので、この問題について助けてもらいたいです。