0

更新: 参照を読み違えました。止められないキーコードは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番目の選択肢としては問題ありません。

どうすればいいのかわからないので、この問題について助けてもらいたいです。

4

1 に答える 1

0

次のコードを使用して傍受します

ownET.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {

        switch (keyCode) {
        case KeyEvent.KEYCODE_DPAD_CENTER:
        case KeyEvent.KEYCODE_ENTER:
        ...;
        return true;
        default:
        break;
        }
    }
    return false;
    }
});

これですべての重要なイベントをキャッチできると思います...ALT-MENUを取得できないため、申し訳ありませんが自分で試すことはできません...

于 2012-08-02T05:23:17.500 に答える