0

更新:我误读了参考资料。我无法停止的关键代码是 ALT 和 META_LEFT

我已经更新了这篇文章的标题。我很抱歉。

我有一个使用蓝牙鼠标演示器来控制它的应用程序。我已经拦截了设备上的所有按钮,除了一个。当它被按下时,我会在我的应用程序中发生各种事情,比如去 Google Play,或者弹出一个询问我想使用什么音乐播放器的弹出窗口。我试图拦截它但失败了。即使是不让键码通过而只做一个 Toast 的测试代码也让这个键码通过。

有问题的键码是 57 和 117,根据this是 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,但现在似乎要求我选择一个音乐播放器“使用...完成操作”

理想情况下,我想将该键用于有用的东西,但作为后备,只是让错误地击中它不会弄乱我的应用程序将是一个不错的第二选择。

我不知道该怎么做,很想在这个问题上得到一些帮助。

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 回答